OSDN Git Service

control: Allow cset'ing specific values in the multi-value case
authorTakashi Iwai <tiwai@suse.de>
Wed, 10 Jun 2015 09:56:23 +0000 (11:56 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 10 Jun 2015 09:56:23 +0000 (11:56 +0200)
Improve the parser to allow empty elements followed by a comma.
Now amixer works like below for setting only the third element.
  % amixer cset 'IIR1 Band1' ,,200

Reported-and-tested-by: Arun Raghavan <arun@accosted.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/control/ctlparse.c

index 8d6c385..877a05e 100644 (file)
@@ -325,6 +325,8 @@ int snd_ctl_ascii_value_parse(snd_ctl_t *handle,
        snd_ctl_elem_value_set_id(dst, myid);
        
        for (idx = 0; idx < count && idx < 128 && ptr && *ptr; idx++) {
+               if (*ptr == ',')
+                       goto skip;
                switch (type) {
                case SND_CTL_ELEM_TYPE_BOOLEAN:
                        tmp = 0;
@@ -375,6 +377,7 @@ int snd_ctl_ascii_value_parse(snd_ctl_t *handle,
                default:
                        break;
                }
+       skip:
                if (!strchr(value, ','))
                        ptr = value;
                else if (*ptr == ',')