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:
Tanu Kaskinen 2011-03-27 21:35:03 +03:00 committed by Colin Guthrie
parent 60f191941b
commit 77da2c4bcf
3 changed files with 26 additions and 10 deletions

View file

@ -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;