mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	ucm: parser - use less memory for integer/real values in parse_value()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
		
							parent
							
								
									d8dfe4dac7
								
							
						
					
					
						commit
						27f97ab585
					
				
					 1 changed files with 10 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -567,6 +567,7 @@ static int parse_value(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED,
 | 
			
		|||
	struct ucm_value *curr;
 | 
			
		||||
	snd_config_iterator_t i, next;
 | 
			
		||||
	snd_config_t *n;
 | 
			
		||||
	char buf[64];
 | 
			
		||||
	long l;
 | 
			
		||||
	long long ll;
 | 
			
		||||
	double d;
 | 
			
		||||
| 
						 | 
				
			
			@ -595,26 +596,22 @@ static int parse_value(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED,
 | 
			
		|||
		type = snd_config_get_type(n);
 | 
			
		||||
		switch (type) {
 | 
			
		||||
		case SND_CONFIG_TYPE_INTEGER:
 | 
			
		||||
			curr->data = malloc(16);
 | 
			
		||||
			snd_config_get_integer(n, &l);
 | 
			
		||||
			snprintf(buf, sizeof(buf), "%li", l);
 | 
			
		||||
__buf:
 | 
			
		||||
			curr->data = malloc(strlen(buf) + 1);
 | 
			
		||||
			if (curr->data == NULL)
 | 
			
		||||
				return -ENOMEM;
 | 
			
		||||
			snd_config_get_integer(n, &l);
 | 
			
		||||
			sprintf(curr->data, "%li", l);
 | 
			
		||||
			strcpy(curr->data, buf);
 | 
			
		||||
			break;
 | 
			
		||||
		case SND_CONFIG_TYPE_INTEGER64:
 | 
			
		||||
			curr->data = malloc(32);
 | 
			
		||||
			if (curr->data == NULL)
 | 
			
		||||
				return -ENOMEM;
 | 
			
		||||
			snd_config_get_integer64(n, &ll);
 | 
			
		||||
			sprintf(curr->data, "%lli", ll);
 | 
			
		||||
			break;
 | 
			
		||||
			snprintf(buf, sizeof(buf), "%lli", ll);
 | 
			
		||||
			goto __buf;
 | 
			
		||||
		case SND_CONFIG_TYPE_REAL:
 | 
			
		||||
			curr->data = malloc(64);
 | 
			
		||||
			if (curr->data == NULL)
 | 
			
		||||
				return -ENOMEM;
 | 
			
		||||
			snd_config_get_real(n, &d);
 | 
			
		||||
			sprintf(curr->data, "%-16g", d);
 | 
			
		||||
			break;
 | 
			
		||||
			snprintf(buf, sizeof(buf), "%-16g", d);
 | 
			
		||||
			goto __buf;
 | 
			
		||||
		case SND_CONFIG_TYPE_STRING:
 | 
			
		||||
			err = parse_string(n, &curr->data);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue