mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -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