diff --git a/Userland/Libraries/LibSystem/Wrappers.cpp b/Userland/Libraries/LibSystem/Wrappers.cpp index bf8207a6e9e..0cade186958 100644 --- a/Userland/Libraries/LibSystem/Wrappers.cpp +++ b/Userland/Libraries/LibSystem/Wrappers.cpp @@ -7,11 +7,11 @@ #include #include -#define HANDLE_SYSCALL_RETURN_VALUE(syscall_name, rc) \ - if ((rc) < 0) { \ - return Error::from_syscall(syscall_name, rc); \ - } \ - return {}; +#define HANDLE_SYSCALL_RETURN_VALUE(syscall_name, rc, success_value) \ + if ((rc) < 0) { \ + return Error::from_syscall(syscall_name, rc); \ + } \ + return success_value; namespace System { @@ -22,7 +22,7 @@ ErrorOr pledge(StringView promises, StringView execpromises) { execpromises.characters_without_null_termination(), execpromises.length() }, }; int rc = syscall(SC_pledge, ¶ms); - HANDLE_SYSCALL_RETURN_VALUE("pledge"sv, rc); + HANDLE_SYSCALL_RETURN_VALUE("pledge"sv, rc, {}); } ErrorOr unveil(StringView path, StringView permissions) @@ -32,13 +32,20 @@ ErrorOr unveil(StringView path, StringView permissions) { permissions.characters_without_null_termination(), permissions.length() }, }; int rc = syscall(SC_unveil, ¶ms); - HANDLE_SYSCALL_RETURN_VALUE("unveil"sv, rc); + HANDLE_SYSCALL_RETURN_VALUE("unveil"sv, rc, {}); } ErrorOr sigaction(int signal, struct sigaction const* action, struct sigaction* old_action) { int rc = syscall(SC_sigaction, signal, action, old_action); - HANDLE_SYSCALL_RETURN_VALUE("sigaction"sv, rc); + HANDLE_SYSCALL_RETURN_VALUE("sigaction"sv, rc, {}); +} + +ErrorOr fstat(int fd) +{ + struct stat st; + int rc = syscall(SC_fstat, fd, &st); + HANDLE_SYSCALL_RETURN_VALUE("fstat"sv, rc, st); } } diff --git a/Userland/Libraries/LibSystem/Wrappers.h b/Userland/Libraries/LibSystem/Wrappers.h index 0eca7977ce2..751d5983345 100644 --- a/Userland/Libraries/LibSystem/Wrappers.h +++ b/Userland/Libraries/LibSystem/Wrappers.h @@ -8,11 +8,13 @@ #include #include +#include namespace System { ErrorOr pledge(StringView promises, StringView execpromises); ErrorOr unveil(StringView path, StringView permissions); ErrorOr sigaction(int signal, struct sigaction const* action, struct sigaction* old_action); +ErrorOr fstat(int fd); }