From: Zbigniew Jędrzejewski-Szmek Date: Sat, 29 Nov 2014 15:28:01 +0000 (-0500) Subject: delta: diff returns 1 when files differ, ignore this X-Git-Tag: v218~209 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=820d3acfe924e58965d14b4711d5df31c5db199a delta: diff returns 1 when files differ, ignore this https://bugs.debian/org/771397 --- diff --git a/src/core/shutdown.c b/src/core/shutdown.c index 2cd0bce2f..def20f502 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 438091c72..99305716e 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 b81cf0f68..44bda34af 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 25f835c23..b6fa8fcc1 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 bf79d1dba..9ae3abd99 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 4c380b8b9..21651708d 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 13da9426d..b53a45da9 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 40e4b22b9..b7a536b98 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)