[alsa-devel] [PATCH] ucm: Allow cset commands to have values with spaces.
Tanu Kaskinen
tanu.kaskinen at digia.com
Thu Aug 9 15:43:31 CEST 2012
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 == '\'') {
+ 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