Skip to content

Commit

Permalink
ucm: define and describe Syntax 7
Browse files Browse the repository at this point in the history
- for new macro argument substitution
- for new Path condition fields substitutions

Link: alsa-project/alsa-ucm-conf#411
Link: #395
Signed-off-by: Jaroslav Kysela <[email protected]>
  • Loading branch information
perexg committed Apr 24, 2024
1 parent c6cd83b commit 3864f7d
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 16 deletions.
15 changes: 10 additions & 5 deletions src/ucm/parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
26 changes: 18 additions & 8 deletions src/ucm/ucm_cond.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
}

Expand Down
14 changes: 12 additions & 2 deletions src/ucm/ucm_confdoc.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ use case verbs for that sound card. i.e.:
# Example master file for blah sound card
# By Joe Blogs <[email protected]>
Syntax 6
Syntax 7
# Use Case name for user interface
Comment "Nice Abstracted Soundcard"
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/ucm/ucm_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 3864f7d

Please sign in to comment.