From 6ce9297e61d5dbc1640392ed6d253d9769953dcf Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Mon, 6 Oct 2025 21:52:15 -0400 Subject: kern: filedes: Add SYS_open system call Signed-off-by: Ian Moffett --- src/sys/include/compat/unix/syscall.h | 5 +++++ src/sys/include/sys/syscall.h | 1 + src/sys/os/os_filedes.c | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+) (limited to 'src') diff --git a/src/sys/include/compat/unix/syscall.h b/src/sys/include/compat/unix/syscall.h index ab464c4..1b51d26 100644 --- a/src/sys/include/compat/unix/syscall.h +++ b/src/sys/include/compat/unix/syscall.h @@ -54,6 +54,11 @@ scret_t sys_cross(struct syscall_args *scargs); */ scret_t sys_query(struct syscall_args *scargs); +/* + * Open a file + */ +scret_t sys_open(struct syscall_args *scargs); + #ifdef _NEED_UNIX_SCTAB scret_t(*g_unix_sctab[])(struct syscall_args *) = { [SYS_none] = NULL, diff --git a/src/sys/include/sys/syscall.h b/src/sys/include/sys/syscall.h index c1c06bb..7dcd266 100644 --- a/src/sys/include/sys/syscall.h +++ b/src/sys/include/sys/syscall.h @@ -49,6 +49,7 @@ #define SYS_sigaction 0x04 #define SYS_query 0x05 /* query a border (mandatory) */ #define SYS_spawn 0x06 /* spawn a process */ +#define SYS_open 0x07 /* open a file */ typedef __ssize_t scret_t; typedef __ssize_t scarg_t; diff --git a/src/sys/os/os_filedes.c b/src/sys/os/os_filedes.c index dde7f22..3353a5f 100644 --- a/src/sys/os/os_filedes.c +++ b/src/sys/os/os_filedes.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -181,3 +182,23 @@ write(int fd, const void *buf, size_t count) return count; } + +/* + * ARG0: Path + * ARG1: Mode + */ +scret_t +sys_open(struct syscall_args *scargs) +{ + const char *u_path = SCARG(scargs, const char *, 0); + mode_t mode = SCARG(scargs, mode_t, 1); + char pathbuf[PATH_MAX]; + int error; + + error = copyinstr(u_path, pathbuf, sizeof(PATH_MAX)); + if (error < 0) { + return error; + } + + return fd_open(pathbuf, mode); +} -- cgit v1.2.3