From 3fd1de5cbe077ff7f88d9fb67430c5dc8fa879cf Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 18 May 2021 16:36:49 +0200 Subject: [PATCH] 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 --- src/ucm/main.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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; -- 2.11.0