From: Jaroslav Kysela Date: Mon, 6 Apr 2020 11:25:43 +0000 (+0200) Subject: ucm: fix the device remove operation X-Git-Tag: v1.2.3~81 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=c9605484d165d2b707f78eef14a224b0b47ba322;p=alsa-lib.git ucm: fix the device remove operation - allow to remove device only from conflicting lists - unify the error codes when the device is not found (ENODEV) Signed-off-by: Jaroslav Kysela --- diff --git a/src/ucm/utils.c b/src/ucm/utils.c index 50b2a1df..d78ba91c 100644 --- a/src/ucm/utils.c +++ b/src/ucm/utils.c @@ -371,7 +371,7 @@ int uc_mgr_rename_in_dev_list(struct dev_list *dev_list, const char *src, return 0; } } - return -ENOENT; + return -ENODEV; } int uc_mgr_remove_from_dev_list(struct dev_list *dev_list, const char *name) @@ -528,17 +528,22 @@ int uc_mgr_remove_device(struct use_case_verb *verb, const char *name) { struct use_case_device *device; struct list_head *pos, *npos; + int err, found = 0; list_for_each_safe(pos, npos, &verb->device_list) { device = list_entry(pos, struct use_case_device, list); if (strcmp(device->name, name) == 0) { uc_mgr_free_device(device); + found++; continue; } - uc_mgr_remove_from_dev_list(&device->dev_list, name); - return 0; + err = uc_mgr_remove_from_dev_list(&device->dev_list, name); + if (err < 0 && err != -ENODEV) + return err; + if (err == 0) + found++; } - return -ENOENT; + return found == 0 ? -ENODEV : 0; } void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr)