mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	ucm: substitute arguments in sequences only for syntax 3+
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
		
							parent
							
								
									82d86df37f
								
							
						
					
					
						commit
						3feea064dd
					
				
					 1 changed files with 33 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -149,26 +149,16 @@ int parse_string_substitute(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
int parse_string_substitute3(snd_use_case_mgr_t *uc_mgr,
 | 
			
		||||
			     snd_config_t *n, char **res)
 | 
			
		||||
{
 | 
			
		||||
	const char *str;
 | 
			
		||||
	char *s;
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	if (uc_mgr->conf_format < 3)
 | 
			
		||||
		return parse_string(n, res);
 | 
			
		||||
	err = snd_config_get_string(n, &str);
 | 
			
		||||
	if (err < 0)
 | 
			
		||||
		return err;
 | 
			
		||||
	err = uc_mgr_get_substituted_value(uc_mgr, &s, str);
 | 
			
		||||
	if (err >= 0)
 | 
			
		||||
		*res = s;
 | 
			
		||||
	return err;
 | 
			
		||||
	return parse_string_substitute(uc_mgr, n, res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Parse integer with substitution
 | 
			
		||||
 */
 | 
			
		||||
int parse_integer_substitute(snd_use_case_mgr_t *uc_mgr,
 | 
			
		||||
			    snd_config_t *n, long *res)
 | 
			
		||||
			     snd_config_t *n, long *res)
 | 
			
		||||
{
 | 
			
		||||
	char *s1, *s2;
 | 
			
		||||
	int err;
 | 
			
		||||
| 
						 | 
				
			
			@ -184,6 +174,30 @@ int parse_integer_substitute(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Parse integer with substitution
 | 
			
		||||
 */
 | 
			
		||||
int parse_integer_substitute3(snd_use_case_mgr_t *uc_mgr,
 | 
			
		||||
			      snd_config_t *n, long *res)
 | 
			
		||||
{
 | 
			
		||||
	char *s1, *s2;
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	err = snd_config_get_ascii(n, &s1);
 | 
			
		||||
	if (err < 0)
 | 
			
		||||
		return err;
 | 
			
		||||
	if (uc_mgr->conf_format < 3)
 | 
			
		||||
		s2 = s1;
 | 
			
		||||
	else
 | 
			
		||||
		err = uc_mgr_get_substituted_value(uc_mgr, &s2, s1);
 | 
			
		||||
	if (err >= 0)
 | 
			
		||||
		err = safe_strtol(s2, res);
 | 
			
		||||
	if (s1 != s2)
 | 
			
		||||
		free(s2);
 | 
			
		||||
	free(s1);
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Parse safe ID
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -672,7 +686,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "cdev") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_CDEV;
 | 
			
		||||
			err = parse_string_substitute(uc_mgr, n, &curr->data.cdev);
 | 
			
		||||
			err = parse_string_substitute3(uc_mgr, n, &curr->data.cdev);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: cdev requires a string!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -682,7 +696,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "cset") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_CSET;
 | 
			
		||||
			err = parse_string_substitute(uc_mgr, n, &curr->data.cset);
 | 
			
		||||
			err = parse_string_substitute3(uc_mgr, n, &curr->data.cset);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: cset requires a string!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -716,7 +730,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "cset-bin-file") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_CSET_BIN_FILE;
 | 
			
		||||
			err = parse_string_substitute(uc_mgr, n, &curr->data.cset);
 | 
			
		||||
			err = parse_string_substitute3(uc_mgr, n, &curr->data.cset);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: cset-bin-file requires a string!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -726,7 +740,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "cset-tlv") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_CSET_TLV;
 | 
			
		||||
			err = parse_string_substitute(uc_mgr, n, &curr->data.cset);
 | 
			
		||||
			err = parse_string_substitute3(uc_mgr, n, &curr->data.cset);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: cset-tlv requires a string!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -736,7 +750,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "usleep") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_SLEEP;
 | 
			
		||||
			err = parse_integer_substitute(uc_mgr, n, &curr->data.sleep);
 | 
			
		||||
			err = parse_integer_substitute3(uc_mgr, n, &curr->data.sleep);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: usleep requires integer!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -746,7 +760,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "msleep") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_SLEEP;
 | 
			
		||||
			err = parse_integer_substitute(uc_mgr, n, &curr->data.sleep);
 | 
			
		||||
			err = parse_integer_substitute3(uc_mgr, n, &curr->data.sleep);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: msleep requires integer!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -757,7 +771,7 @@ static int parse_sequence(snd_use_case_mgr_t *uc_mgr,
 | 
			
		|||
 | 
			
		||||
		if (strcmp(cmd, "exec") == 0) {
 | 
			
		||||
			curr->type = SEQUENCE_ELEMENT_TYPE_EXEC;
 | 
			
		||||
			err = parse_string_substitute(uc_mgr, n, &curr->data.exec);
 | 
			
		||||
			err = parse_string_substitute3(uc_mgr, n, &curr->data.exec);
 | 
			
		||||
			if (err < 0) {
 | 
			
		||||
				uc_error("error: exec requires a string!");
 | 
			
		||||
				return err;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue