From ae0a44c628423d8eaec64d119511815d6884ab6b Mon Sep 17 00:00:00 2001 From: Margarita Olaya Date: Fri, 18 Mar 2011 11:26:22 -0600 Subject: [PATCH 1/3] alsa-lib: ucm: allow values to be read from devices This allows devices value to be read using the get_value(). Also fix a little formatting. Signed-off-by: Margarita Olaya Cabrera Acked-by: Liam Girdwood Signed-off-by: Takashi Iwai --- src/ucm/main.c | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-) Index: alsa-lib-1.0.24.1/src/ucm/main.c =================================================================== --- alsa-lib-1.0.24.1.orig/src/ucm/main.c 2011-02-01 01:18:50.000000000 +1100 +++ alsa-lib-1.0.24.1/src/ucm/main.c 2011-03-21 17:04:27.330833027 +1100 @@ -75,8 +75,10 @@ int cnt; cnt = list_count(list) * mult; - if (cnt == 0) + if (cnt == 0) { + *result = NULL; return cnt; + } res = calloc(mult, cnt * sizeof(char *)); if (res == NULL) return -ENOMEM; @@ -858,6 +860,7 @@ val = malloc(sizeof(struct myvalue)); if (val == NULL) return -ENOMEM; + val->value = v->data; list_add_tail(&val->list, list); } } @@ -911,8 +914,8 @@ goto __fail; } err = alloc_str_list(&mylist, 1, &res); - *list = (const char **)res; if (err >= 0) { + *list = (const char **)res; list_for_each(pos, &mylist) { val = list_entry(pos, struct myvalue, list); *res = strdup(val->value); @@ -1059,24 +1062,31 @@ * \param uc_mgr Use case manager * \param identifier Value identifier (string) * \param value Returned value string - * \param modifier modifier name (string) + * \param item Modifier or Device name (string) * \return Zero on success (value is filled), otherwise a negative error code */ static int get_value(snd_use_case_mgr_t *uc_mgr, - const char *identifier, - const char **value, - const char *modifier) + const char *identifier, + const char **value, + const char *item) { - struct use_case_modifier *mod; + struct use_case_modifier *mod; + struct use_case_device *dev; int err; - if (modifier != NULL) { - mod = find_modifier(uc_mgr, modifier); + if (item != NULL) { + mod = find_modifier(uc_mgr, item); if (mod != NULL) { err = get_value1(value, &mod->value_list, identifier); if (err >= 0 || err != -ENOENT) return err; } + dev = find_device(uc_mgr->active_verb, item); + if (dev != NULL) { + err = get_value1(value, &dev->value_list, identifier); + if (err >= 0 || err != -ENOENT) + return err; + } } err = get_value1(value, &uc_mgr->active_verb->value_list, identifier); if (err >= 0 || err != -ENOENT)