summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2023-02-20 11:17:58 +0100
committerGitHub <noreply@github.com>2023-02-20 11:17:58 +0100
commit0ba75bde5f008dd5eb818549c76e1fa4499b7f36 (patch)
tree5a72210bb447405c809d4b4ab8ff5bbee79a1e03 /src
parentc207a572275f7645673727b5406b3449d35da99f (diff)
parentced30d69fa878b7132d818fa7cd6da163108c254 (diff)
downloadsystemd-0ba75bde5f008dd5eb818549c76e1fa4499b7f36.tar.gz
Merge pull request #26479 from yuwata/exec-util-misc
exec-util: several cleanups
Diffstat (limited to 'src')
-rw-r--r--src/basic/process-util.c2
-rw-r--r--src/shared/exec-util.c15
2 files changed, 8 insertions, 9 deletions
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index be82d0ffe7..4df369dd2a 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -1185,7 +1185,7 @@ int safe_fork_full(
else
pid = fork();
if (pid < 0)
- return log_full_errno(prio, errno, "Failed to fork: %m");
+ return log_full_errno(prio, errno, "Failed to fork off '%s': %m", strna(name));
if (pid > 0) {
/* We are in the parent process */
diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c
index 7ed2cce76b..2e8f5b8562 100644
--- a/src/shared/exec-util.c
+++ b/src/shared/exec-util.c
@@ -151,18 +151,16 @@ static int do_execute(
t = NULL;
} else {
r = wait_for_terminate_and_check(t, pid, WAIT_LOG);
- if (FLAGS_SET(flags, EXEC_DIR_IGNORE_ERRORS)) {
- if (r < 0)
- continue;
- } else if (r > 0)
+ if (r < 0)
+ return r;
+ if (!FLAGS_SET(flags, EXEC_DIR_IGNORE_ERRORS) && r > 0)
return r;
if (callbacks) {
if (lseek(fd, 0, SEEK_SET) < 0)
return log_error_errno(errno, "Failed to seek on serialization fd: %m");
- r = callbacks[STDOUT_GENERATE](fd, callback_args[STDOUT_GENERATE]);
- fd = -EBADF;
+ r = callbacks[STDOUT_GENERATE](TAKE_FD(fd), callback_args[STDOUT_GENERATE]);
if (r < 0)
return log_error_errno(r, "Failed to process output from %s: %m", *path);
}
@@ -186,6 +184,8 @@ static int do_execute(
assert(t);
r = wait_for_terminate_and_check(t, pid, WAIT_LOG);
+ if (r < 0)
+ return r;
if (!FLAGS_SET(flags, EXEC_DIR_IGNORE_ERRORS) && r > 0)
return r;
}
@@ -249,8 +249,7 @@ int execute_directories(
if (lseek(fd, 0, SEEK_SET) < 0)
return log_error_errno(errno, "Failed to rewind serialization fd: %m");
- r = callbacks[STDOUT_CONSUME](fd, callback_args[STDOUT_CONSUME]);
- fd = -EBADF;
+ r = callbacks[STDOUT_CONSUME](TAKE_FD(fd), callback_args[STDOUT_CONSUME]);
if (r < 0)
return log_error_errno(r, "Failed to parse returned data: %m");
return 0;