From 820d3acfe924e58965d14b4711d5df31c5db199a Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Sat, 29 Nov 2014 10:28:01 -0500 Subject: delta: diff returns 1 when files differ, ignore this https://bugs.debian/org/771397 --- src/core/shutdown.c | 2 +- src/delta/delta.c | 2 +- src/login/inhibit.c | 2 +- src/nspawn/nspawn.c | 4 ++-- src/quotacheck/quotacheck.c | 2 +- src/shared/util.c | 22 ++++++++++++---------- src/shared/util.h | 2 +- src/vconsole/vconsole-setup.c | 4 ++-- 8 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/core/shutdown.c b/src/core/shutdown.c index 2cd0bce2f3..def20f5022 100644 --- a/src/core/shutdown.c +++ b/src/core/shutdown.c @@ -367,7 +367,7 @@ int main(int argc, char *argv[]) { execv(args[0], (char * const *) args); _exit(EXIT_FAILURE); } else - wait_for_terminate_and_warn("kexec", pid); + wait_for_terminate_and_warn("kexec", pid, true); } cmd = RB_AUTOBOOT; diff --git a/src/delta/delta.c b/src/delta/delta.c index 438091c727..99305716ed 100644 --- a/src/delta/delta.c +++ b/src/delta/delta.c @@ -193,7 +193,7 @@ static int found_override(const char *top, const char *bottom) { _exit(1); } - wait_for_terminate_and_warn("diff", pid); + wait_for_terminate_and_warn("diff", pid, false); putchar('\n'); return k; diff --git a/src/login/inhibit.c b/src/login/inhibit.c index b81cf0f688..44bda34aff 100644 --- a/src/login/inhibit.c +++ b/src/login/inhibit.c @@ -280,7 +280,7 @@ int main(int argc, char *argv[]) { _exit(EXIT_FAILURE); } - r = wait_for_terminate_and_warn(argv[optind], pid); + r = wait_for_terminate_and_warn(argv[optind], pid, true); return r < 0 ? EXIT_FAILURE : r; } diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 25f835c230..b6fa8fcc15 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -2544,7 +2544,7 @@ static int change_uid_gid(char **_home) { truncate_nl(line); - wait_for_terminate_and_warn("getent passwd", pid); + wait_for_terminate_and_warn("getent passwd", pid, true); x = strchr(line, ':'); if (!x) { @@ -2628,7 +2628,7 @@ static int change_uid_gid(char **_home) { truncate_nl(line); - wait_for_terminate_and_warn("getent initgroups", pid); + wait_for_terminate_and_warn("getent initgroups", pid, true); /* Skip over the username and subsequent separator whitespace */ x = line; diff --git a/src/quotacheck/quotacheck.c b/src/quotacheck/quotacheck.c index bf79d1dbaa..9ae3abd990 100644 --- a/src/quotacheck/quotacheck.c +++ b/src/quotacheck/quotacheck.c @@ -111,7 +111,7 @@ int main(int argc, char *argv[]) { _exit(1); /* Operational error */ } - r = wait_for_terminate_and_warn("quotacheck", pid); + r = wait_for_terminate_and_warn("quotacheck", pid, true); return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/shared/util.c b/src/shared/util.c index 4c380b8b90..21651708d5 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -3786,8 +3786,11 @@ int wait_for_terminate(pid_t pid, siginfo_t *status) { * * That is, success is indicated by a return value of zero, and an * error is indicated by a non-zero value. + * + * A warning is emitted if the process terminates abnormally, + * and also if it returns non-zero unless check_exit_code is true. */ -int wait_for_terminate_and_warn(const char *name, pid_t pid) { +int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code) { int r; siginfo_t status; @@ -3799,14 +3802,13 @@ int wait_for_terminate_and_warn(const char *name, pid_t pid) { return log_warning_errno(r, "Failed to wait for %s: %m", name); if (status.si_code == CLD_EXITED) { - if (status.si_status != 0) { - log_warning("%s failed with error code %i.", name, status.si_status); - return status.si_status; - } - - log_debug("%s succeeded.", name); - return 0; + if (status.si_status != 0) + log_full(check_exit_code ? LOG_WARNING : LOG_DEBUG, + "%s failed with error code %i.", name, status.si_status); + else + log_debug("%s succeeded.", name); + return status.si_status; } else if (status.si_code == CLD_KILLED || status.si_code == CLD_DUMPED) { @@ -4161,13 +4163,13 @@ void execute_directory(const char *directory, DIR *d, usec_t timeout, char *argv path = hashmap_remove(pids, UINT_TO_PTR(pid)); assert(path); - wait_for_terminate_and_warn(path, pid); + wait_for_terminate_and_warn(path, pid, true); } _exit(EXIT_SUCCESS); } - wait_for_terminate_and_warn(directory, executor_pid); + wait_for_terminate_and_warn(directory, executor_pid, true); } int kill_and_sigcont(pid_t pid, int sig) { diff --git a/src/shared/util.h b/src/shared/util.h index 13da9426dd..b53a45da9d 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -513,7 +513,7 @@ char *unquote(const char *s, const char *quotes); char *normalize_env_assignment(const char *s); int wait_for_terminate(pid_t pid, siginfo_t *status); -int wait_for_terminate_and_warn(const char *name, pid_t pid); +int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code); noreturn void freeze(void); diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c index 40e4b22b99..b7a536b983 100644 --- a/src/vconsole/vconsole-setup.c +++ b/src/vconsole/vconsole-setup.c @@ -308,7 +308,7 @@ int main(int argc, char **argv) { } if (font_pid > 0) - wait_for_terminate_and_warn(KBD_SETFONT, font_pid); + wait_for_terminate_and_warn(KBD_SETFONT, font_pid, true); r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid); if (r < 0) { @@ -317,7 +317,7 @@ int main(int argc, char **argv) { } if (keymap_pid > 0) - wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); + wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid, true); /* Only copy the font when we started setfont successfully */ if (font_copy && font_pid > 0) -- cgit v1.2.3-54-g00ecf