]> git.alsa-project.org Git - alsa-lib.git/commitdiff
ucm: Allow empty strings in "${var:...}" substitutions
authorHans de Goede <hdegoede@redhat.com>
Sat, 27 Jun 2020 18:30:52 +0000 (20:30 +0200)
committerJaroslav Kysela <perex@perex.cz>
Sun, 28 Jun 2020 15:51:46 +0000 (17:51 +0200)
Recent ucm-conf changes introduce checks like this one in various places:

If.mspk {
        Condition {
                Type String
                Empty "${var:MonoSpeaker}"
        }
        True ...
        False ...
}

The 'Empty "${var:MonoSpeaker}"' part can only every succeed if we do:

Define.MonoSpeaker ""

But so far that would result in an error like this one:

ALSA lib ucm_subs.c:367:(uc_mgr_get_substituted_value) variable '${var:MonoSpeaker}' is not defined in this context!
ALSA lib main.c:983:(snd_use_case_mgr_open) error: failed to import cht-bsw-rt5672 use case configuration -22
alsaucm: error failed to open sound card cht-bsw-rt5672: Invalid argument

This commit fixes this by allowing empty values for "${var:...}"
substitutions.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/ucm/ucm_subs.c

index 293426f26198776dddf2881f2f2d2020d9ab2c19..a154aa510ee81942a5c3e6c276eb51a71b70fd08 100644 (file)
@@ -262,9 +262,10 @@ static char *rval_var(snd_use_case_mgr_t *uc_mgr, const char *id)
                goto __rval;                                            \
        }
 
-#define MATCH_VARIABLE2(name, id, fcn)                                 \
+#define MATCH_VARIABLE2(name, id, fcn, empty_ok)                       \
        if (strncmp((name), (id), sizeof(id) - 1) == 0) {               \
                idsize = sizeof(id) - 1;                                \
+               allow_empty = (empty_ok);                               \
                fcn2 = (fcn);                                           \
                goto __match2;                                          \
        }
@@ -314,11 +315,11 @@ __std:
                MATCH_VARIABLE(value, "${CardName}", rval_card_name, false);
                MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname, false);
                MATCH_VARIABLE(value, "${CardComponents}", rval_card_components, true);
-               MATCH_VARIABLE2(value, "${env:", rval_env);
-               MATCH_VARIABLE2(value, "${sys:", rval_sysfs);
-               MATCH_VARIABLE2(value, "${var:", rval_var);
-               MATCH_VARIABLE2(value, "${CardNumberByName:", rval_card_number_by_name);
-               MATCH_VARIABLE2(value, "${CardIdByName:", rval_card_id_by_name);
+               MATCH_VARIABLE2(value, "${env:", rval_env, false);
+               MATCH_VARIABLE2(value, "${sys:", rval_sysfs, false);
+               MATCH_VARIABLE2(value, "${var:", rval_var, true);
+               MATCH_VARIABLE2(value, "${CardNumberByName:", rval_card_number_by_name, false);
+               MATCH_VARIABLE2(value, "${CardIdByName:", rval_card_id_by_name, false);
 __merr:
                err = -EINVAL;
                tmp = strchr(value, '}');