diff --git a/src/kernel/emulation/linux/CMakeLists.txt b/src/kernel/emulation/linux/CMakeLists.txt index 624033eba..e7e1282c1 100644 --- a/src/kernel/emulation/linux/CMakeLists.txt +++ b/src/kernel/emulation/linux/CMakeLists.txt @@ -88,6 +88,7 @@ set(emulation_sources stat/rmdir.c stat/common.c synch/semwait_signal.c + hfs/stub.c dirent/getdirentries.c time/gettimeofday.c time/utimes.c diff --git a/src/kernel/emulation/linux/hfs/README b/src/kernel/emulation/linux/hfs/README new file mode 100644 index 000000000..06bf551be --- /dev/null +++ b/src/kernel/emulation/linux/hfs/README @@ -0,0 +1,4 @@ +This directory contains system calls specified as "calls to support HFS/HFS Plus file system semantics". + +We cannot ignore these syscalls, because users don't expect the ENOSYS error. Instead, we return ENOTSUP indicating the filesystem doesn't support this operation. + diff --git a/src/kernel/emulation/linux/hfs/stub.c b/src/kernel/emulation/linux/hfs/stub.c new file mode 100644 index 000000000..dd634b9f9 --- /dev/null +++ b/src/kernel/emulation/linux/hfs/stub.c @@ -0,0 +1,76 @@ +#include "stub.h" +#include "../base.h" +#include "../errno.h" +#include +#include "../../../../../platform-include/sys/errno.h" + +long sys_mkcomplex() +{ + return -ENOTSUP; +} + +long sys_statv() +{ + return -ENOTSUP; +} + +long sys_lstatv() +{ + return -ENOTSUP; +} + +long sys_fstatv() +{ + return -ENOTSUP; +} + + +// We could support the following four syscalls +// because darling-dmg exports at least some +// of this metadata. +long sys_getattrlist() +{ + return -ENOTSUP; +} + +long sys_setattrlist() +{ + return -ENOTSUP; +} + +long sys_fgetattrlist() +{ + return -ENOTSUP; +} + +long sys_fsetattrlist() +{ + return -ENOTSUP; +} + +long sys_getdirentriesattr() +{ + return -ENOTSUP; +} + +long sys_exchangedata() +{ + return -ENOTSUP; +} + +long sys_searchfs() +{ + return -ENOTSUP; +} + +long sys_delete() +{ + return -ENOTSUP; +} + +long sys_copyfile() +{ + return -ENOTSUP; +} + + diff --git a/src/kernel/emulation/linux/hfs/stub.h b/src/kernel/emulation/linux/hfs/stub.h new file mode 100644 index 000000000..97ccf0fbf --- /dev/null +++ b/src/kernel/emulation/linux/hfs/stub.h @@ -0,0 +1,19 @@ +#ifndef LINUX_HFS_STUB_H +#define LINUX_HFS_STUB_H + +long sys_mkcomplex(); +long sys_statv(); +long sys_lstatv(); +long sys_fstatv(); +long sys_getattrlist(); +long sys_setattrlist(); +long sys_getdirentriesattr(); +long sys_exchangedata(); +long sys_searchfs(); +long sys_delete(); +long sys_copyfile(); +long sys_fgetattrlist(); +long sys_fsetattrlist(); + +#endif + diff --git a/src/kernel/emulation/linux/syscalls.c b/src/kernel/emulation/linux/syscalls.c index c61dbcb96..0f80a9e96 100644 --- a/src/kernel/emulation/linux/syscalls.c +++ b/src/kernel/emulation/linux/syscalls.c @@ -78,6 +78,7 @@ #include "process/vfork.h" #include "process/fork.h" #include "wqueue/bsdthread_register.h" +#include "hfs/stub.h" void* __bsd_syscall_table[512] = { [1] = sys_exit, @@ -156,6 +157,19 @@ void* __bsd_syscall_table[512] = { [199] = sys_lseek, [201] = sys_ftruncate, [202] = sys_sysctl, + [216] = sys_mkcomplex, + [217] = sys_statv, + [218] = sys_lstatv, + [219] = sys_fstatv, + [220] = sys_getattrlist, + [221] = sys_setattrlist, + [222] = sys_getdirentriesattr, + [223] = sys_exchangedata, + [225] = sys_searchfs, + [226] = sys_delete, + [227] = sys_copyfile, + [228] = sys_fgetattrlist, + [229] = sys_fsetattrlist, [334] = sys_semwait_signal, [338] = sys_stat64, [339] = sys_fstat64,