process-util: introduce report_errno_and_exit() as part of src/basic/process-util.{h,c}

This commit is contained in:
Ivan Kruglov
2024-11-06 11:18:38 +01:00
parent f755ac99cb
commit a567de392d
4 changed files with 18 additions and 17 deletions
+16
View File
@@ -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);
}
+2
View File
@@ -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);
-15
View File
@@ -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);
}
-2
View File
@@ -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);