From: Ivan Kruglov Date: Wed, 6 Nov 2024 10:11:03 +0000 (+0100) Subject: process-util: introduce report_errno_and_exit() as part of src/basic/process-util... X-Git-Tag: v257-rc1~10^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a567de392d7e9c93a7673f38ac8c5fd94d3adb6c;p=thirdparty%2Fsystemd.git process-util: introduce report_errno_and_exit() as part of src/basic/process-util.{h,c} --- diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 75bc65652e2..ee0edfaf94e 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -35,6 +35,7 @@ #include "fileio.h" #include "fs-util.h" #include "hostname-util.h" +#include "io-util.h" #include "locale-util.h" #include "log.h" #include "macro.h" @@ -2238,3 +2239,18 @@ static const char* const sched_policy_table[] = { }; DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(sched_policy, int, INT_MAX); + +_noreturn_ void report_errno_and_exit(int errno_fd, int error) { + int r; + + if (error >= 0) + _exit(EXIT_SUCCESS); + + assert(errno_fd >= 0); + + r = loop_write(errno_fd, &error, sizeof(error)); + if (r < 0) + log_debug_errno(r, "Failed to write errno to errno_fd=%d: %m", errno_fd); + + _exit(EXIT_FAILURE); +} diff --git a/src/basic/process-util.h b/src/basic/process-util.h index cb6d47a5bb7..0763b64cff0 100644 --- a/src/basic/process-util.h +++ b/src/basic/process-util.h @@ -273,3 +273,5 @@ int posix_spawn_wrapper( int proc_dir_open(DIR **ret); int proc_dir_read(DIR *d, pid_t *ret); int proc_dir_read_pidref(DIR *d, PidRef *ret); + +_noreturn_ void report_errno_and_exit(int errno_fd, int error); diff --git a/src/machine/operation.c b/src/machine/operation.c index 0b2139acf03..7d7bfa50627 100644 --- a/src/machine/operation.c +++ b/src/machine/operation.c @@ -154,18 +154,3 @@ Operation *operation_free(Operation *o) { return mfree(o); } - -_noreturn_ void report_errno_and_exit(int errno_fd, int r) { - if (r >= 0) - _exit(EXIT_SUCCESS); - - assert(errno_fd >= 0); - - ssize_t n = write(errno_fd, &r, sizeof(r)); - if (n < 0) - log_debug_errno(errno, "Failed to write operation's errno: %m"); - if (n != sizeof(r)) - log_debug_errno(SYNTHETIC_ERRNO(EIO), "Sent unexpectedly short message"); - - _exit(EXIT_FAILURE); -} diff --git a/src/machine/operation.h b/src/machine/operation.h index ee9149854ac..75bf918c2b1 100644 --- a/src/machine/operation.h +++ b/src/machine/operation.h @@ -39,5 +39,3 @@ static inline int operation_new_with_bus_reply(Manager *manager, Machine *machin static inline int operation_new_with_varlink_reply(Manager *manager, Machine *machine, pid_t child, sd_varlink *link, int errno_fd, Operation **ret) { return operation_new(manager, machine, child, /* message = */ NULL, link, errno_fd, ret); } - -void report_errno_and_exit(int errno_fd, int r);