[alsa-devel] [PATCH] ucm: Allow cset commands to have values with spaces.

Takashi Iwai tiwai at suse.de
Thu Aug 9 16:07:51 CEST 2012


At Thu, 9 Aug 2012 16:43:31 +0300,
Tanu Kaskinen wrote:
> 
> An example:
>     cset "name='Input Select' Digital Mic"
> 
> The old parsing code interpreted "name='Input Select' Digital"
> as the element id, which of course didn't work.
> 
> Signed-off-by: Tanu Kaskinen <tanu.kaskinen at digia.com>
> ---
>  src/ucm/main.c |   19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/src/ucm/main.c b/src/ucm/main.c
> index 4b37776..05a7b0a 100644
> --- a/src/ucm/main.c
> +++ b/src/ucm/main.c
> @@ -170,8 +170,23 @@ static int execute_cset(snd_ctl_t *ctl, char *cset)
>  	snd_ctl_elem_value_malloc(&value);
>  	snd_ctl_elem_info_malloc(&info);
>  
> -	pos = strrchr(cset, ' ');
> -	if (pos == NULL) {
> +	/* Find the space after the element id, taking quoting with
> +	   single-quotes into account. */
> +	for (pos = cset; *pos != '\0'; pos += strcspn(pos, "' ")) {
> +		if (*pos == ' ')
> +			break;
> +		if (*pos == '\'') {

A double-quote can be supported easily here...


Takashi

> +			pos++;
> +			pos += strcspn(pos, "'");
> +			if (*pos == '\0') {
> +				uc_error("invalid element id (closing single-quote not found): %s", cset);
> +				err = -EINVAL;
> +				goto __fail;
> +			}
> +			pos++;
> +		}
> +	}
> +	if (*pos == '\0') {
>  		uc_error("undefined value for cset >%s<", cset);
>  		err = -EINVAL;
>  		goto __fail;
> -- 
> 1.7.9.5
> 


More information about the Alsa-devel mailing list