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@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 == ''') { + 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;