From 0015040ebd2e82edc4d6fc00af8709ad8d850b4f Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 29 Mar 2022 19:24:06 +0200 Subject: [PATCH] LibCore: Add syscall wrapper for access() --- Userland/Libraries/LibCore/System.cpp | 18 +++++++++++++++++- Userland/Libraries/LibCore/System.h | 3 ++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 01fe7e50ae..00fdfb7f6e 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2021-2022, Andreas Kling - * Copyright (c) 2021, Kenneth Myhra + * Copyright (c) 2021-2022, Kenneth Myhra * Copyright (c) 2021, Sam Atkins * Copyright (c) 2022, Matthias Zimmerman * @@ -1119,4 +1119,20 @@ ErrorOr unlockpt(int fildes) return {}; } +ErrorOr access(StringView pathname, int mode) +{ + if (pathname.is_null()) + return Error::from_syscall("access"sv, -EFAULT); + +#ifdef __serenity__ + int rc = ::syscall(Syscall::SC_access, pathname.characters_without_null_termination(), pathname.length(), mode); + HANDLE_SYSCALL_RETURN_VALUE("access"sv, rc, {}); +#else + String path_string = pathname; + if (::access(path_string.characters(), mode) < 0) + return Error::from_syscall("access"sv, -errno); + return {}; +#endif +} + } diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index b8bf14eae4..2489860883 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2021, Andreas Kling - * Copyright (c) 2021, Kenneth Myhra + * Copyright (c) 2021-2022, Kenneth Myhra * Copyright (c) 2021, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause @@ -150,5 +150,6 @@ ErrorOr setenv(StringView, StringView, bool); ErrorOr posix_openpt(int flags); ErrorOr grantpt(int fildes); ErrorOr unlockpt(int fildes); +ErrorOr access(StringView pathname, int mode); }