machine: introduce report_errno_and_exit()

This commit is contained in:
Ivan Kruglov
2024-10-31 10:58:21 +01:00
parent a52ce4a29d
commit 30a34657b8
2 changed files with 17 additions and 0 deletions

View File

@@ -154,3 +154,18 @@ 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);
}

View File

@@ -39,3 +39,5 @@ 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);