|
|
9ecd5b8 |
From 4b1505597c1df43a20108fd1f17699ad04c20c4f Mon Sep 17 00:00:00 2001
|
|
|
9ecd5b8 |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
|
9ecd5b8 |
Date: Sat, 29 Nov 2014 10:28:01 -0500
|
|
|
9ecd5b8 |
Subject: [PATCH] delta: diff returns 1 when files differ, ignore this
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
https://bugs.debian/org/771397
|
|
|
9ecd5b8 |
(cherry picked from commit 820d3acfe924e58965d14b4711d5df31c5db199a)
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
Conflicts:
|
|
|
9ecd5b8 |
src/quotacheck/quotacheck.c
|
|
|
9ecd5b8 |
---
|
|
|
9ecd5b8 |
src/core/shutdown.c | 2 +-
|
|
|
9ecd5b8 |
src/delta/delta.c | 2 +-
|
|
|
9ecd5b8 |
src/login/inhibit.c | 2 +-
|
|
|
9ecd5b8 |
src/nspawn/nspawn.c | 4 ++--
|
|
|
9ecd5b8 |
src/quotacheck/quotacheck.c | 5 ++++-
|
|
|
9ecd5b8 |
src/shared/util.c | 22 ++++++++++++----------
|
|
|
9ecd5b8 |
src/shared/util.h | 2 +-
|
|
|
9ecd5b8 |
src/vconsole/vconsole-setup.c | 4 ++--
|
|
|
9ecd5b8 |
8 files changed, 24 insertions(+), 19 deletions(-)
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
diff --git a/src/core/shutdown.c b/src/core/shutdown.c
|
|
|
9ecd5b8 |
index 03cfddc543..7add89f6e9 100644
|
|
|
9ecd5b8 |
--- a/src/core/shutdown.c
|
|
|
9ecd5b8 |
+++ b/src/core/shutdown.c
|
|
|
9ecd5b8 |
@@ -371,7 +371,7 @@ int main(int argc, char *argv[]) {
|
|
|
9ecd5b8 |
execv(args[0], (char * const *) args);
|
|
|
9ecd5b8 |
_exit(EXIT_FAILURE);
|
|
|
9ecd5b8 |
} else
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn("kexec", pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn("kexec", pid, true);
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
cmd = RB_AUTOBOOT;
|
|
|
9ecd5b8 |
diff --git a/src/delta/delta.c b/src/delta/delta.c
|
|
|
9ecd5b8 |
index 25c4a0bcfc..9a2f17c58a 100644
|
|
|
9ecd5b8 |
--- a/src/delta/delta.c
|
|
|
9ecd5b8 |
+++ b/src/delta/delta.c
|
|
|
9ecd5b8 |
@@ -194,7 +194,7 @@ static int found_override(const char *top, const char *bottom) {
|
|
|
9ecd5b8 |
_exit(1);
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn("diff", pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn("diff", pid, false);
|
|
|
9ecd5b8 |
putchar('\n');
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
return k;
|
|
|
9ecd5b8 |
diff --git a/src/login/inhibit.c b/src/login/inhibit.c
|
|
|
9ecd5b8 |
index 122c69d7a1..e2222ea69c 100644
|
|
|
9ecd5b8 |
--- a/src/login/inhibit.c
|
|
|
9ecd5b8 |
+++ b/src/login/inhibit.c
|
|
|
9ecd5b8 |
@@ -280,7 +280,7 @@ int main(int argc, char *argv[]) {
|
|
|
9ecd5b8 |
_exit(EXIT_FAILURE);
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- r = wait_for_terminate_and_warn(argv[optind], pid);
|
|
|
9ecd5b8 |
+ r = wait_for_terminate_and_warn(argv[optind], pid, true);
|
|
|
9ecd5b8 |
return r < 0 ? EXIT_FAILURE : r;
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
|
|
9ecd5b8 |
index 712c0ea332..4e0fbb610e 100644
|
|
|
9ecd5b8 |
--- a/src/nspawn/nspawn.c
|
|
|
9ecd5b8 |
+++ b/src/nspawn/nspawn.c
|
|
|
9ecd5b8 |
@@ -2757,7 +2757,7 @@ static int change_uid_gid(char **_home) {
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
truncate_nl(line);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn("getent passwd", pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn("getent passwd", pid, true);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
x = strchr(line, ':');
|
|
|
9ecd5b8 |
if (!x) {
|
|
|
9ecd5b8 |
@@ -2841,7 +2841,7 @@ static int change_uid_gid(char **_home) {
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
truncate_nl(line);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn("getent initgroups", pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn("getent initgroups", pid, true);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
/* Skip over the username and subsequent separator whitespace */
|
|
|
9ecd5b8 |
x = line;
|
|
|
9ecd5b8 |
diff --git a/src/quotacheck/quotacheck.c b/src/quotacheck/quotacheck.c
|
|
|
9ecd5b8 |
index ed95b48c63..a45285722f 100644
|
|
|
9ecd5b8 |
--- a/src/quotacheck/quotacheck.c
|
|
|
9ecd5b8 |
+++ b/src/quotacheck/quotacheck.c
|
|
|
9ecd5b8 |
@@ -74,6 +74,7 @@ int main(int argc, char *argv[]) {
|
|
|
9ecd5b8 |
};
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
pid_t pid;
|
|
|
9ecd5b8 |
+ int r;
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
if (argc > 1) {
|
|
|
9ecd5b8 |
log_error("This program takes no arguments.");
|
|
|
9ecd5b8 |
@@ -107,5 +108,7 @@ int main(int argc, char *argv[]) {
|
|
|
9ecd5b8 |
_exit(1); /* Operational error */
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- return wait_for_terminate_and_warn("quotacheck", pid) >= 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
|
9ecd5b8 |
+ r = wait_for_terminate_and_warn("quotacheck", pid, true);
|
|
|
9ecd5b8 |
+
|
|
|
9ecd5b8 |
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
diff --git a/src/shared/util.c b/src/shared/util.c
|
|
|
9ecd5b8 |
index 4143f6d643..927bca4ec4 100644
|
|
|
9ecd5b8 |
--- a/src/shared/util.c
|
|
|
9ecd5b8 |
+++ b/src/shared/util.c
|
|
|
9ecd5b8 |
@@ -3599,8 +3599,11 @@ int wait_for_terminate(pid_t pid, siginfo_t *status) {
|
|
|
9ecd5b8 |
*
|
|
|
9ecd5b8 |
* That is, success is indicated by a return value of zero, and an
|
|
|
9ecd5b8 |
* error is indicated by a non-zero value.
|
|
|
9ecd5b8 |
+ *
|
|
|
9ecd5b8 |
+ * A warning is emitted if the process terminates abnormally,
|
|
|
9ecd5b8 |
+ * and also if it returns non-zero unless check_exit_code is true.
|
|
|
9ecd5b8 |
*/
|
|
|
9ecd5b8 |
-int wait_for_terminate_and_warn(const char *name, pid_t pid) {
|
|
|
9ecd5b8 |
+int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code) {
|
|
|
9ecd5b8 |
int r;
|
|
|
9ecd5b8 |
siginfo_t status;
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
@@ -3614,14 +3617,13 @@ int wait_for_terminate_and_warn(const char *name, pid_t pid) {
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
if (status.si_code == CLD_EXITED) {
|
|
|
9ecd5b8 |
- if (status.si_status != 0) {
|
|
|
9ecd5b8 |
- log_warning("%s failed with error code %i.", name, status.si_status);
|
|
|
9ecd5b8 |
- return status.si_status;
|
|
|
9ecd5b8 |
- }
|
|
|
9ecd5b8 |
-
|
|
|
9ecd5b8 |
- log_debug("%s succeeded.", name);
|
|
|
9ecd5b8 |
- return 0;
|
|
|
9ecd5b8 |
+ if (status.si_status != 0)
|
|
|
9ecd5b8 |
+ log_full(check_exit_code ? LOG_WARNING : LOG_DEBUG,
|
|
|
9ecd5b8 |
+ "%s failed with error code %i.", name, status.si_status);
|
|
|
9ecd5b8 |
+ else
|
|
|
9ecd5b8 |
+ log_debug("%s succeeded.", name);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
+ return status.si_status;
|
|
|
9ecd5b8 |
} else if (status.si_code == CLD_KILLED ||
|
|
|
9ecd5b8 |
status.si_code == CLD_DUMPED) {
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
@@ -3976,13 +3978,13 @@ void execute_directory(const char *directory, DIR *d, usec_t timeout, char *argv
|
|
|
9ecd5b8 |
path = hashmap_remove(pids, UINT_TO_PTR(pid));
|
|
|
9ecd5b8 |
assert(path);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn(path, pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn(path, pid, true);
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
_exit(EXIT_SUCCESS);
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn(directory, executor_pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn(directory, executor_pid, true);
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
int kill_and_sigcont(pid_t pid, int sig) {
|
|
|
9ecd5b8 |
diff --git a/src/shared/util.h b/src/shared/util.h
|
|
|
9ecd5b8 |
index 35584467c1..cde38a5559 100644
|
|
|
9ecd5b8 |
--- a/src/shared/util.h
|
|
|
9ecd5b8 |
+++ b/src/shared/util.h
|
|
|
9ecd5b8 |
@@ -505,7 +505,7 @@ char *unquote(const char *s, const char *quotes);
|
|
|
9ecd5b8 |
char *normalize_env_assignment(const char *s);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
int wait_for_terminate(pid_t pid, siginfo_t *status);
|
|
|
9ecd5b8 |
-int wait_for_terminate_and_warn(const char *name, pid_t pid);
|
|
|
9ecd5b8 |
+int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
noreturn void freeze(void);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
|
|
|
9ecd5b8 |
index 0db97f88bc..4f29caab2a 100644
|
|
|
9ecd5b8 |
--- a/src/vconsole/vconsole-setup.c
|
|
|
9ecd5b8 |
+++ b/src/vconsole/vconsole-setup.c
|
|
|
9ecd5b8 |
@@ -310,7 +310,7 @@ int main(int argc, char **argv) {
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
if (font_pid > 0)
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn(KBD_SETFONT, font_pid, true);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
|
|
|
9ecd5b8 |
if (r < 0) {
|
|
|
9ecd5b8 |
@@ -319,7 +319,7 @@ int main(int argc, char **argv) {
|
|
|
9ecd5b8 |
}
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
if (keymap_pid > 0)
|
|
|
9ecd5b8 |
- wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
|
|
|
9ecd5b8 |
+ wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid, true);
|
|
|
9ecd5b8 |
|
|
|
9ecd5b8 |
/* Only copy the font when we started setfont successfully */
|
|
|
9ecd5b8 |
if (font_copy && font_pid > 0)
|