[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