From fadab9eaa2c19f0d9a5eda293861028355a22e46 Mon Sep 17 00:00:00 2001 From: Lubos Dolezel Date: Sat, 31 Oct 2015 21:56:58 +0100 Subject: [PATCH] Add sys_link() --- src/kernel/emulation/linux/CMakeLists.txt | 1 + src/kernel/emulation/linux/syscalls.c | 2 ++ src/kernel/emulation/linux/unistd/link.c | 18 ++++++++++++++++++ src/kernel/emulation/linux/unistd/link.h | 7 +++++++ 4 files changed, 28 insertions(+) create mode 100644 src/kernel/emulation/linux/unistd/link.c create mode 100644 src/kernel/emulation/linux/unistd/link.h diff --git a/src/kernel/emulation/linux/CMakeLists.txt b/src/kernel/emulation/linux/CMakeLists.txt index 55dd4817e..4a076425f 100644 --- a/src/kernel/emulation/linux/CMakeLists.txt +++ b/src/kernel/emulation/linux/CMakeLists.txt @@ -45,6 +45,7 @@ set(emulation_sources unistd/access.c unistd/readlink.c unistd/symlink.c + unistd/link.c unistd/umask.c unistd/chroot.c process/vfork.c diff --git a/src/kernel/emulation/linux/syscalls.c b/src/kernel/emulation/linux/syscalls.c index 91460b040..7d95a3d5d 100644 --- a/src/kernel/emulation/linux/syscalls.c +++ b/src/kernel/emulation/linux/syscalls.c @@ -34,6 +34,7 @@ #include "unistd/symlink.h" #include "unistd/umask.h" #include "unistd/chroot.h" +#include "unistd/link.h" #include "signal/kill.h" #include "signal/sigaltstack.h" #include "signal/sigaction.h" @@ -70,6 +71,7 @@ void* __bsd_syscall_table[512] = { [4] = sys_write, [5] = sys_open, [6] = sys_close, + [9] = sys_link, [13] = sys_fchdir, [18] = sys_getfsstat, [20] = sys_getpid, diff --git a/src/kernel/emulation/linux/unistd/link.c b/src/kernel/emulation/linux/unistd/link.c new file mode 100644 index 000000000..b04c5dfb1 --- /dev/null +++ b/src/kernel/emulation/linux/unistd/link.c @@ -0,0 +1,18 @@ +#include "link.h" +#include "../base.h" +#include "../errno.h" +#include + +long sys_link(const char* path, const char* link) +{ + int ret; + + // TODO: case translation + + ret = LINUX_SYSCALL(__NR_link, path, link); + if (ret < 0) + ret = errno_linux_to_bsd(ret); + + return ret; +} + diff --git a/src/kernel/emulation/linux/unistd/link.h b/src/kernel/emulation/linux/unistd/link.h new file mode 100644 index 000000000..59d72b72f --- /dev/null +++ b/src/kernel/emulation/linux/unistd/link.h @@ -0,0 +1,7 @@ +#ifndef LINUX_LINK_H +#define LINUX_LINK_H + +long sys_link(const char* path, const char* link); + +#endif + -- 2.51.2