diff --git a/src/kernel/emulation/linux/CMakeLists.txt b/src/kernel/emulation/linux/CMakeLists.txt index 8a33ff0f7..dbbbb2f26 100644 --- a/src/kernel/emulation/linux/CMakeLists.txt +++ b/src/kernel/emulation/linux/CMakeLists.txt @@ -65,6 +65,7 @@ set(emulation_sources unistd/readlink.c unistd/symlink.c unistd/link.c + unistd/linkat.c unistd/unlink.c unistd/chdir.c unistd/mknod.c diff --git a/src/kernel/emulation/linux/syscalls.c b/src/kernel/emulation/linux/syscalls.c index 4df1a059f..f7057f9c4 100644 --- a/src/kernel/emulation/linux/syscalls.c +++ b/src/kernel/emulation/linux/syscalls.c @@ -39,6 +39,7 @@ #include "unistd/umask.h" #include "unistd/chroot.h" #include "unistd/link.h" +#include "unistd/linkat.h" #include "unistd/unlink.h" #include "unistd/chdir.h" #include "unistd/mknod.h" @@ -345,9 +346,10 @@ void* __bsd_syscall_table[600] = { [465] = sys_renameat, [466] = sys_faccessat, [467] = sys_fchmodat, - [468] = sys_fchownat + [468] = sys_fchownat, [469] = sys_fstatat, [470] = sys_fstatat64, + [471] = sys_linkat, [500] = sys_getentropy, }; diff --git a/src/kernel/emulation/linux/unistd/linkat.c b/src/kernel/emulation/linux/unistd/linkat.c new file mode 100644 index 000000000..c1931aa83 --- /dev/null +++ b/src/kernel/emulation/linux/unistd/linkat.c @@ -0,0 +1,19 @@ +#include "link.h" +#include "../base.h" +#include "../errno.h" +#include +#include "../../../../../platform-include/sys/errno.h" +#include "../common_at.h" + +extern char* strcpy(char* dst, const char* src); + +long sys_linkat(int fd, const char* path, int fdlink, const char* link, int flag) +{ + int ret; + + ret = LINUX_SYSCALL(__NR_linkat, atfd(fd), path, atfd(fdlink), link, atflags_bsd_to_linux(flag)); + if (ret < 0) + ret = errno_linux_to_bsd(ret); + + return ret; +} diff --git a/src/kernel/emulation/linux/unistd/linkat.h b/src/kernel/emulation/linux/unistd/linkat.h new file mode 100644 index 000000000..ded96f239 --- /dev/null +++ b/src/kernel/emulation/linux/unistd/linkat.h @@ -0,0 +1,7 @@ +#ifndef LINUX_LINKAT_H +#define LINUX_LINKAT_H + +long sys_linkat(int fd, const char* path, int fdlink, const char* link, int flag); + +#endif +