From 0d328f3c86a421089720883864d363dad2f88d25 Mon Sep 17 00:00:00 2001 From: Junior Rantila Date: Mon, 10 Jan 2022 14:34:09 +0100 Subject: [PATCH] LibCore+flock: Make Core::System::waitpid more ergonomic --- Userland/Libraries/LibCore/System.cpp | 7 ++++--- Userland/Libraries/LibCore/System.h | 7 ++++++- Userland/Utilities/flock.cpp | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index c0b73dbbd5..b01e412d62 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -517,12 +517,13 @@ ErrorOr posix_spawnp(StringView const path, posix_spawn_file_actions_t* c return child_pid; } -ErrorOr waitpid(pid_t waitee, int* wstatus, int options) +ErrorOr waitpid(pid_t waitee, int options) { - pid_t pid = ::waitpid(waitee, wstatus, options); + int wstatus; + pid_t pid = ::waitpid(waitee, &wstatus, options); if (pid < 0) return Error::from_syscall("waitpid"sv, -errno); - return pid; + return WaitPidResult { pid, wstatus }; } ErrorOr setuid(uid_t uid) diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 40a1d0d888..7cf6027d53 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -85,7 +85,12 @@ ErrorOr> getpwuid(uid_t); ErrorOr> getgrgid(gid_t); ErrorOr clock_settime(clockid_t clock_id, struct timespec* ts); ErrorOr posix_spawnp(StringView const path, posix_spawn_file_actions_t* const file_actions, posix_spawnattr_t* const attr, char* const arguments[], char* const envp[]); -ErrorOr waitpid(pid_t waitee, int* wstatus, int options); + +struct WaitPidResult { + pid_t pid; + int status; +}; +ErrorOr waitpid(pid_t waitee, int options = 0); ErrorOr setuid(uid_t); ErrorOr seteuid(uid_t); ErrorOr setgid(gid_t); diff --git a/Userland/Utilities/flock.cpp b/Userland/Utilities/flock.cpp index 565910139d..57d1609211 100644 --- a/Userland/Utilities/flock.cpp +++ b/Userland/Utilities/flock.cpp @@ -19,7 +19,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } pid_t child_pid = TRY(Core::System::posix_spawnp(arguments.strings[2], nullptr, nullptr, &arguments.argv[2], environ)); - int status = TRY(Core::System::waitpid(child_pid, &status, 0)); + auto [_, status] = TRY(Core::System::waitpid(child_pid)); return WEXITSTATUS(status); }