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_path *p = userdata;
 | 
				
			||||||
    pa_alsa_element *e;
 | 
					    pa_alsa_element *e;
 | 
				
			||||||
    uint32_t volume_limit;
 | 
					    long volume_limit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!(e = element_get(p, section, TRUE))) {
 | 
					    if (!(e = element_get(p, section, TRUE))) {
 | 
				
			||||||
        pa_log("[%s:%u] volume-limit makes no sense in '%s'", filename, line, section);
 | 
					        pa_log("[%s:%u] volume-limit makes no sense in '%s'", filename, line, section);
 | 
				
			||||||
        return -1;
 | 
					        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);
 | 
					        pa_log("[%s:%u] Invalid value for volume-limit", filename, line);
 | 
				
			||||||
        return -1;
 | 
					        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 */
 | 
					/* Convert the string s to a signed integer in *ret_i */
 | 
				
			||||||
int pa_atoi(const char *s, int32_t *ret_i) {
 | 
					int pa_atoi(const char *s, int32_t *ret_i) {
 | 
				
			||||||
    char *x = NULL;
 | 
					 | 
				
			||||||
    long l;
 | 
					    long l;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_assert(s);
 | 
					    pa_assert(s);
 | 
				
			||||||
    pa_assert(ret_i);
 | 
					    pa_assert(ret_i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    errno = 0;
 | 
					    if (pa_atol(s, &l) < 0)
 | 
				
			||||||
    l = strtol(s, &x, 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!x || *x || errno) {
 | 
					 | 
				
			||||||
        if (!errno)
 | 
					 | 
				
			||||||
            errno = EINVAL;
 | 
					 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((int32_t) l != l) {
 | 
					    if ((int32_t) l != l) {
 | 
				
			||||||
        errno = ERANGE;
 | 
					        errno = ERANGE;
 | 
				
			||||||
| 
						 | 
					@ -2064,6 +2057,28 @@ int pa_atou(const char *s, uint32_t *ret_u) {
 | 
				
			||||||
    return 0;
 | 
					    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
 | 
					#ifdef HAVE_STRTOF_L
 | 
				
			||||||
static locale_t c_locale = NULL;
 | 
					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_atoi(const char *s, int32_t *ret_i);
 | 
				
			||||||
int pa_atou(const char *s, uint32_t *ret_u);
 | 
					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);
 | 
					int pa_atod(const char *s, double *ret_d);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
size_t pa_snprintf(char *str, size_t size, const char *format, ...);
 | 
					size_t pa_snprintf(char *str, size_t size, const char *format, ...);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue