mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2026-03-07 04:33:44 -05:00
ucm: substitute verb name and file field
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
df498d89c7
commit
8d90c4746b
1 changed files with 44 additions and 23 deletions
|
|
@ -143,6 +143,27 @@ int parse_string_substitute(snd_use_case_mgr_t *uc_mgr,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse string and substitute
|
||||||
|
*/
|
||||||
|
int parse_string_substitute3(snd_use_case_mgr_t *uc_mgr,
|
||||||
|
snd_config_t *n, char **res)
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
char *s;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (uc_mgr->conf_format < 3)
|
||||||
|
return parse_string(n, res);
|
||||||
|
err = snd_config_get_string(n, &str);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
err = uc_mgr_get_substituted_value(uc_mgr, &s, str);
|
||||||
|
if (err >= 0)
|
||||||
|
*res = s;
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse integer with substitution
|
* Parse integer with substitution
|
||||||
*/
|
*/
|
||||||
|
|
@ -493,11 +514,7 @@ static int parse_device_list(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED,
|
||||||
sdev = calloc(1, sizeof(struct dev_list_node));
|
sdev = calloc(1, sizeof(struct dev_list_node));
|
||||||
if (sdev == NULL)
|
if (sdev == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
if (uc_mgr->conf_format < 3) {
|
err = parse_string_substitute3(uc_mgr, n, &sdev->name);
|
||||||
err = parse_string(n, &sdev->name);
|
|
||||||
} else {
|
|
||||||
err = parse_string_substitute(uc_mgr, n, &sdev->name);
|
|
||||||
}
|
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
free(sdev);
|
free(sdev);
|
||||||
return err;
|
return err;
|
||||||
|
|
@ -576,11 +593,7 @@ static int parse_component_seq(snd_use_case_mgr_t *uc_mgr,
|
||||||
char *val;
|
char *val;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (uc_mgr->conf_format < 3) {
|
err = parse_string_substitute3(uc_mgr, n, &val);
|
||||||
err = parse_string(n, &val);
|
|
||||||
} else {
|
|
||||||
err = parse_string_substitute(uc_mgr, n, &val);
|
|
||||||
}
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
@ -1604,23 +1617,24 @@ static int parse_master_section(snd_use_case_mgr_t *uc_mgr, snd_config_t *cfg,
|
||||||
{
|
{
|
||||||
snd_config_iterator_t i, next;
|
snd_config_iterator_t i, next;
|
||||||
snd_config_t *n;
|
snd_config_t *n;
|
||||||
const char *use_case_name, *file = NULL, *comment = NULL;
|
char *use_case_name, *file = NULL, *comment = NULL;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (snd_config_get_id(cfg, &use_case_name) < 0) {
|
|
||||||
uc_error("unable to get name for use case section");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
||||||
uc_error("compound type expected for use case section");
|
uc_error("compound type expected for use case section");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = parse_get_safe_name(uc_mgr, cfg, NULL, &use_case_name);
|
||||||
|
if (err < 0) {
|
||||||
|
uc_error("unable to get name for use case section");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/* in-place evaluation */
|
/* in-place evaluation */
|
||||||
err = uc_mgr_evaluate_inplace(uc_mgr, cfg);
|
err = uc_mgr_evaluate_inplace(uc_mgr, cfg);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
goto __error;
|
||||||
|
|
||||||
/* parse master config sections */
|
/* parse master config sections */
|
||||||
snd_config_for_each(i, next, cfg) {
|
snd_config_for_each(i, next, cfg) {
|
||||||
|
|
@ -1631,20 +1645,20 @@ static int parse_master_section(snd_use_case_mgr_t *uc_mgr, snd_config_t *cfg,
|
||||||
|
|
||||||
/* get use case verb file name */
|
/* get use case verb file name */
|
||||||
if (strcmp(id, "File") == 0) {
|
if (strcmp(id, "File") == 0) {
|
||||||
err = snd_config_get_string(n, &file);
|
err = parse_string_substitute3(uc_mgr, n, &file);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
uc_error("failed to get File");
|
uc_error("failed to get File");
|
||||||
return err;
|
goto __error;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get optional use case comment */
|
/* get optional use case comment */
|
||||||
if (strncmp(id, "Comment", 7) == 0) {
|
if (strncmp(id, "Comment", 7) == 0) {
|
||||||
err = snd_config_get_string(n, &comment);
|
err = parse_string_substitute3(uc_mgr, n, &comment);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
uc_error("error: failed to get Comment");
|
uc_error("error: failed to get Comment");
|
||||||
return err;
|
goto __error;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -1657,11 +1671,18 @@ static int parse_master_section(snd_use_case_mgr_t *uc_mgr, snd_config_t *cfg,
|
||||||
/* do we have both use case name and file ? */
|
/* do we have both use case name and file ? */
|
||||||
if (!file) {
|
if (!file) {
|
||||||
uc_error("error: use case missing file");
|
uc_error("error: use case missing file");
|
||||||
return -EINVAL;
|
err = -EINVAL;
|
||||||
|
goto __error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* parse verb file */
|
/* parse verb file */
|
||||||
return parse_verb_file(uc_mgr, use_case_name, comment, file);
|
err = parse_verb_file(uc_mgr, use_case_name, comment, file);
|
||||||
|
|
||||||
|
__error:
|
||||||
|
free(use_case_name);
|
||||||
|
free(file);
|
||||||
|
free(comment);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue