/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include namespace Kernel { ErrorOr Process::sys$unlink(int dirfd, Userspace user_path, size_t path_length, int flags) { VERIFY_NO_PROCESS_BIG_LOCK(this); TRY(require_promise(Pledge::cpath)); auto path = TRY(get_syscall_path_argument(user_path, path_length)); if (flags & ~AT_REMOVEDIR) return Error::from_errno(EINVAL); auto base = TRY(custody_for_dirfd(dirfd)); if (flags & AT_REMOVEDIR) TRY(VirtualFileSystem::the().rmdir(credentials(), path->view(), *base)); else TRY(VirtualFileSystem::the().unlink(credentials(), path->view(), *base)); return 0; } }