]> git.alsa-project.org Git - alsa-lib.git/commitdiff
ucm: define and describe Syntax 7
authorJaroslav Kysela <perex@perex.cz>
Wed, 24 Apr 2024 13:33:40 +0000 (15:33 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 24 Apr 2024 13:36:05 +0000 (15:36 +0200)
- for new macro argument substitution
- for new Path condition fields substitutions

Link: https://github.com/alsa-project/alsa-ucm-conf/pull/411
Link: https://github.com/alsa-project/alsa-lib/issues/395
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/ucm/parser.c
src/ucm/ucm_cond.c
src/ucm/ucm_confdoc.h
src/ucm/ucm_local.h

index 02f01a10aadac320c5b181522dce6e280814c87a..488a5c621751c13335f11191a8c8b743db5fad2d 100644 (file)
@@ -454,11 +454,16 @@ static int evaluate_macro1(snd_use_case_mgr_t *uc_mgr,
                err = snd_config_get_ascii(n, &var);
                if (err < 0)
                        goto __err_path;
-               err = uc_mgr_get_substituted_value(uc_mgr, &var2, var);
-               free(var);
-               if (err >= 0) {
-                       err = uc_mgr_set_variable(uc_mgr, name, var2);
-                       free(var2);
+               if (uc_mgr->conf_format < 7) {
+                       err = uc_mgr_set_variable(uc_mgr, name, var);
+                       free(var);
+               } else {
+                       err = uc_mgr_get_substituted_value(uc_mgr, &var2, var);
+                       free(var);
+                       if (err >= 0) {
+                               err = uc_mgr_set_variable(uc_mgr, name, var2);
+                               free(var2);
+                       }
                }
                if (err < 0)
                        goto __err_path;
index bc4444e3f37913952eff77597c52a90483348133..87bc97629a3919db38be601f54c72b5b2740d375 100644 (file)
@@ -293,9 +293,13 @@ static int if_eval_path(snd_use_case_mgr_t *uc_mgr, snd_config_t *eval)
                return -EINVAL;
        }
 
-       err = uc_mgr_get_substituted_value(uc_mgr, &s, mode);
-       if (err < 0)
-               return err;
+       if (uc_mgr->conf_format < 7) {
+               s = (char *)mode;
+       } else {
+               err = uc_mgr_get_substituted_value(uc_mgr, &s, mode);
+               if (err < 0)
+                       return err;
+       }
        if (strncasecmp(s, "exist", 5) == 0) {
                amode = F_OK;
        } else if (strcasecmp(s, "read") == 0) {
@@ -309,17 +313,23 @@ static int if_eval_path(snd_use_case_mgr_t *uc_mgr, snd_config_t *eval)
                free(s);
                return -EINVAL;
        }
-       free(s);
+       if (s != mode)
+               free(s);
 
-       err = uc_mgr_get_substituted_value(uc_mgr, &s, path);
-       if (err < 0)
-               return err;
+       if (uc_mgr->conf_format < 7) {
+               s = (char *)path;
+       } else {
+               err = uc_mgr_get_substituted_value(uc_mgr, &s, path);
+               if (err < 0)
+                       return err;
+       }
 #ifdef HAVE_EACCESS
        err = eaccess(s, amode);
 #else
        err = access(s, amode);
 #endif
-       free(s);
+       if (s != path)
+               free(s);
        return err ? 0 : 1;
 }
 
index 7a907934ab9158f9792e10dc6947925e385daba3..eb12a7146ab3a9af2a3a9e2f75c40b6ef0cad7c7 100644 (file)
@@ -63,7 +63,7 @@ use case verbs for that sound card. i.e.:
 # Example master file for blah sound card
 # By Joe Blogs <joe@bloggs.org>
 
-Syntax 6
+Syntax 7
 
 # Use Case name for user interface
 Comment "Nice Abstracted Soundcard"
@@ -489,7 +489,8 @@ DefineMacro.macro1 {
 The arguments in the macro are refered as the variables with the double
 underscore name prefix (like *__variable*). The configuration block in
 the DefineMacro subtree is always evaluated (including arguments and variables)
-at the time of the instantiation.
+at the time of the instantiation. Argument string substitutions
+(for multiple macro call levels) were added in *Syntax* version *7*.
 
 The macros can be instantiated (expanded) using:
 
@@ -563,6 +564,15 @@ Field                | Description
 String               | string
 Regex                | regex expression (extended posix, ignore case)
 
+#### Path is present (Type Path)
+
+Field                | Description
+---------------------|-----------------------
+Path                 | path (filename)
+Mode                 | exist,read,write,exec
+
+Note: Substitution for Path and Mode fields were added in *Syntax* version *7*.
+
 #### ALSA control element exists (Type ControlExists)
 
 Field                | Description
index fc249058abc70f76d6bb0050ed6d0c71a99ac55b..464d11543a77de68800c28db04c7a30b9ee89c49 100644 (file)
@@ -40,7 +40,7 @@
 #include <pthread.h>
 #include "use-case.h"
 
-#define SYNTAX_VERSION_MAX     6
+#define SYNTAX_VERSION_MAX     7
 
 #define MAX_CARD_SHORT_NAME    32
 #define MAX_CARD_LONG_NAME     80