mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
alsa-mixer: Get rid of a compiler warning.
On 64-bit systems LONG_MAX is greater than the largest possible value of a uint32_t variable, which caused the compiler to warn about a comparison that is always false. On 32-bit systems pa_atou() can return a value that will overflow when assigned to e->volume_limit, which has type long, so the comparison was necessary. This dilemma is resolved by using pa_atol() instead of pa_atou().
This commit is contained in:
parent
60f191941b
commit
77da2c4bcf
3 changed files with 26 additions and 10 deletions
|
|
@ -1920,14 +1920,14 @@ static int element_parse_volume_limit(
|
|||
|
||||
pa_alsa_path *p = userdata;
|
||||
pa_alsa_element *e;
|
||||
uint32_t volume_limit;
|
||||
long volume_limit;
|
||||
|
||||
if (!(e = element_get(p, section, TRUE))) {
|
||||
pa_log("[%s:%u] volume-limit makes no sense in '%s'", filename, line, section);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pa_atou(rvalue, &volume_limit) < 0 || volume_limit > LONG_MAX) {
|
||||
if (pa_atol(rvalue, &volume_limit) < 0 || volume_limit < 0) {
|
||||
pa_log("[%s:%u] Invalid value for volume-limit", filename, line);
|
||||
return -1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2012,20 +2012,13 @@ char *pa_state_path(const char *fn, pa_bool_t appendmid) {
|
|||
|
||||
/* Convert the string s to a signed integer in *ret_i */
|
||||
int pa_atoi(const char *s, int32_t *ret_i) {
|
||||
char *x = NULL;
|
||||
long l;
|
||||
|
||||
pa_assert(s);
|
||||
pa_assert(ret_i);
|
||||
|
||||
errno = 0;
|
||||
l = strtol(s, &x, 0);
|
||||
|
||||
if (!x || *x || errno) {
|
||||
if (!errno)
|
||||
errno = EINVAL;
|
||||
if (pa_atol(s, &l) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((int32_t) l != l) {
|
||||
errno = ERANGE;
|
||||
|
|
@ -2064,6 +2057,28 @@ int pa_atou(const char *s, uint32_t *ret_u) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Convert the string s to a signed long integer in *ret_l. */
|
||||
int pa_atol(const char *s, long *ret_l) {
|
||||
char *x = NULL;
|
||||
long l;
|
||||
|
||||
pa_assert(s);
|
||||
pa_assert(ret_l);
|
||||
|
||||
errno = 0;
|
||||
l = strtol(s, &x, 0);
|
||||
|
||||
if (!x || *x || errno) {
|
||||
if (!errno)
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
*ret_l = l;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_STRTOF_L
|
||||
static locale_t c_locale = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ char *pa_state_path(const char *fn, pa_bool_t prepend_machine_id);
|
|||
|
||||
int pa_atoi(const char *s, int32_t *ret_i);
|
||||
int pa_atou(const char *s, uint32_t *ret_u);
|
||||
int pa_atol(const char *s, long *ret_l);
|
||||
int pa_atod(const char *s, double *ret_d);
|
||||
|
||||
size_t pa_snprintf(char *str, size_t size, const char *format, ...);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue