From ce4e0d023bd28ef449ea4656b6860c96d76f5599 Mon Sep 17 00:00:00 2001 From: Lubos Dolezel Date: Wed, 1 Feb 2017 23:47:05 +0100 Subject: [PATCH] Implement sys_faccessat() --- src/kernel/emulation/linux/CMakeLists.txt | 1 + src/kernel/emulation/linux/syscalls.c | 2 ++ src/kernel/emulation/linux/unistd/faccessat.c | 17 +++++++++++++++++ src/kernel/emulation/linux/unistd/faccessat.h | 7 +++++++ 4 files changed, 27 insertions(+) create mode 100644 src/kernel/emulation/linux/unistd/faccessat.c create mode 100644 src/kernel/emulation/linux/unistd/faccessat.h diff --git a/src/kernel/emulation/linux/CMakeLists.txt b/src/kernel/emulation/linux/CMakeLists.txt index cb6efbc6a..302536a67 100644 --- a/src/kernel/emulation/linux/CMakeLists.txt +++ b/src/kernel/emulation/linux/CMakeLists.txt @@ -59,6 +59,7 @@ set(emulation_sources unistd/ftruncate.c unistd/truncate.c unistd/access.c + unistd/faccessat.c unistd/readlink.c unistd/symlink.c unistd/link.c diff --git a/src/kernel/emulation/linux/syscalls.c b/src/kernel/emulation/linux/syscalls.c index 6409793e2..0f78f20e1 100644 --- a/src/kernel/emulation/linux/syscalls.c +++ b/src/kernel/emulation/linux/syscalls.c @@ -25,6 +25,7 @@ #include "unistd/pwrite.h" #include "unistd/getpid.h" #include "unistd/access.h" +#include "unistd/faccessat.h" #include "unistd/lseek.h" #include "unistd/truncate.h" #include "unistd/ftruncate.h" @@ -340,6 +341,7 @@ void* __bsd_syscall_table[600] = { [463] = sys_openat, [464] = sys_openat_nocancel, [465] = sys_renameat, + [466] = sys_faccessat, [469] = sys_fstatat, [470] = sys_fstatat64, [500] = sys_getentropy, diff --git a/src/kernel/emulation/linux/unistd/faccessat.c b/src/kernel/emulation/linux/unistd/faccessat.c new file mode 100644 index 000000000..5d7fc50a1 --- /dev/null +++ b/src/kernel/emulation/linux/unistd/faccessat.c @@ -0,0 +1,17 @@ +#include "faccessat.h" +#include "../base.h" +#include "../errno.h" +#include +#include "../common_at.h" + +long sys_faccessat(int fd, const char* filename, int amode, int flag) +{ + int ret; + + ret = LINUX_SYSCALL(__NR_faccessat, atfd(fd), filename, amode, atflags_bsd_to_linux(flag)); + + if (ret < 0) + ret = errno_linux_to_bsd(ret); + + return ret; +} diff --git a/src/kernel/emulation/linux/unistd/faccessat.h b/src/kernel/emulation/linux/unistd/faccessat.h new file mode 100644 index 000000000..297647245 --- /dev/null +++ b/src/kernel/emulation/linux/unistd/faccessat.h @@ -0,0 +1,7 @@ +#ifndef LINUX_FACCESSAT_H +#define LINUX_FACCESSAT_H + +long sys_faccessat(int fd, const char* filename, int amode, int flag); + +#endif + -- 2.51.2