diff options
-rw-r--r-- | Userland/Libraries/LibCore/System.cpp | 25 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/System.h | 9 |
2 files changed, 34 insertions, 0 deletions
diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 17ff8023af..3cddacc95e 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -107,6 +107,31 @@ ErrorOr<long> ptrace(int request, pid_t tid, void* address, void* data) } #endif +#ifndef AK_OS_BSD_GENERIC +ErrorOr<Optional<struct spwd>> getspent() +{ + errno = 0; + if (auto* spwd = ::getspent()) + return *spwd; + if (errno) + return Error::from_syscall("getspent"sv, -errno); + return Optional<struct spwd> {}; +} + +ErrorOr<Optional<struct spwd>> getspnam(StringView name) +{ + errno = 0; + ::setspent(); + while (auto* spwd = ::getspent()) { + if (spwd->sp_namp == name) + return *spwd; + } + if (errno) + return Error::from_syscall("getspnam"sv, -errno); + return Optional<struct spwd> {}; +} +#endif + #ifndef AK_OS_MACOS ErrorOr<int> accept4(int sockfd, sockaddr* address, socklen_t* address_length, int flags) { diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 318cdde735..8630e58485 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -22,6 +22,10 @@ #include <time.h> #include <utime.h> +#ifndef AK_OS_BSD_GENERIC +# include <shadow.h> +#endif + namespace Core::System { #ifdef __serenity__ @@ -35,6 +39,11 @@ ErrorOr<void> mount(int source_fd, StringView target, StringView fs_type, int fl ErrorOr<long> ptrace(int request, pid_t tid, void* address, void* data); #endif +#ifndef AK_OS_BSD_GENERIC +ErrorOr<Optional<struct spwd>> getspent(); +ErrorOr<Optional<struct spwd>> getspnam(StringView name); +#endif + #ifndef AK_OS_MACOS ErrorOr<int> accept4(int sockfd, struct sockaddr*, socklen_t*, int flags); #endif |