From: Jaroslav Kysela Date: Tue, 18 May 2021 14:36:49 +0000 (+0200) Subject: ucm: recognize first '-' character as ignore error for exec/shell X-Git-Tag: android-x86-8.1-r6~43 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3fd1de5cbe077ff7f88d9fb67430c5dc8fa879cf;p=android-x86%2Fexternal-alsa-lib.git ucm: recognize first '-' character as ignore error for exec/shell It may be useful to ignore the returned errors (like modprobe etc). Signed-off-by: Jaroslav Kysela --- diff --git a/src/ucm/main.c b/src/ucm/main.c index 81bed833..361952f6 100644 --- a/src/ucm/main.c +++ b/src/ucm/main.c @@ -674,6 +674,7 @@ static int execute_sequence(snd_use_case_mgr_t *uc_mgr, char *cdev = NULL; snd_ctl_t *ctl = NULL; struct ctl_list *ctl_list; + bool ignore_error; int err = 0; list_for_each(pos, seq) { @@ -767,19 +768,25 @@ static int execute_sequence(snd_use_case_mgr_t *uc_mgr, usleep(s->data.sleep); break; case SEQUENCE_ELEMENT_TYPE_EXEC: - err = uc_mgr_exec(s->data.exec); - if (err != 0) { + if (s->data.exec == NULL) + break; + ignore_error = s->data.exec[0] == '-'; + err = uc_mgr_exec(s->data.exec + (ignore_error ? 1 : 0)); + if (ignore_error == false && err != 0) { uc_error("exec '%s' failed (exit code %d)", s->data.exec, err); goto __fail; } break; case SEQUENCE_ELEMENT_TYPE_SHELL: + if (s->data.exec == NULL) + break; + ignore_error = s->data.exec[0] == '-'; shell_retry: - err = system(s->data.exec); + err = system(s->data.exec + (ignore_error ? 1 : 0)); if (WIFSIGNALED(err)) { err = -EINTR; } if (WIFEXITED(err)) { - if (WEXITSTATUS(err) != 0) { + if (ignore_error == false && WEXITSTATUS(err) != 0) { uc_error("command '%s' failed (exit code %d)", s->data.exec, WEXITSTATUS(err)); err = -EINVAL; goto __fail;