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);
+}
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);