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;
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) {
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;
}
# 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"
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:
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
#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