]> git.alsa-project.org Git - alsa-lib.git/commitdiff
conf: fix the device parsing when arguments has no defaults
authorJaroslav Kysela <perex@perex.cz>
Thu, 9 Dec 2021 09:15:29 +0000 (10:15 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 9 Dec 2021 09:15:47 +0000 (10:15 +0100)
The commit bf528b90 sets the value to an empty string which causes
these errors:

   pcm_hw.c: Invalid type for device
   pcm_hw.c: Invalid type for subdevice

When device arguments (@args) have no default values set,
the field must be skipped to keep the compatibility.

BugLink: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1246
Fixes: https://github.com/alsa-project/alsa-lib/issues/199
Fixes: bf528b90 ("conf: add possibility to evaluate simple integer math expressions")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/conf.c
src/confeval.c

index 0f6d2ba82bab2cbc0acd1ad6c9b3c18407be7214..d3597cbcb461e82255d3c858dbe705299cffc43c 100644 (file)
@@ -4994,8 +4994,10 @@ int snd_config_copy(snd_config_t **dst,
 static int _snd_config_expand_vars(snd_config_t **dst, const char *s, void *private_data)
 {
        snd_config_t *val, *vars = private_data;
-       if (snd_config_search(vars, s, &val) < 0)
-               return snd_config_make_string(dst, "");
+       if (snd_config_search(vars, s, &val) < 0) {
+               *dst = NULL;
+               return 0;
+       }
        return snd_config_copy(dst, val);
 }
 
@@ -5060,6 +5062,8 @@ static int _snd_config_expand(snd_config_t *src,
                                err = snd_config_evaluate_string(dst, s, fcn, vars);
                                if (err < 0)
                                        return err;
+                               if (*dst == NULL)
+                                       return 0;
                                err = snd_config_set_id(*dst, id);
                                if (err < 0) {
                                        snd_config_delete(*dst);
index be9ac8747750494cfd3ffba899c2261f2892e9de..4a6f8c2e3a15d5d074b4e7e6bd7d01f3032fa2e9 100644 (file)
@@ -203,6 +203,11 @@ int _snd_eval_string(snd_config_t **dst, const char *s,
                                free(m);
                                if (err < 0)
                                        return err;
+                               if (tmp == NULL) {
+                                       err = snd_config_imake_integer(&tmp, NULL, 0);
+                                       if (err < 0)
+                                               return err;
+                               }
                                s = e;
                        }
                        err = _to_integer(op == LEFT ? &left : &right, tmp);