diff options
author | Ian Moffett <ian@osmora.org> | 2025-10-06 21:52:15 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-10-06 21:52:15 -0400 |
commit | 6ce9297e61d5dbc1640392ed6d253d9769953dcf (patch) | |
tree | 816873aab452d24ad24ed7a41e19946c4519ce1b /src/sys/os | |
parent | 25461d1d5df8f6d1cf415eeb7d8d7c073171def5 (diff) |
kern: filedes: Add SYS_open system call
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/os')
-rw-r--r-- | src/sys/os/os_filedes.c | 21 |
1 files changed, 21 insertions, 0 deletions
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 <sys/namei.h> #include <os/filedesc.h> #include <os/kalloc.h> +#include <os/systm.h> #include <io/cons/cons.h> #include <compat/unix/syscall.h> #include <string.h> @@ -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); +} |