diff options
author | Ian Moffett <ian@osmora.org> | 2025-10-17 19:58:54 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-10-17 20:03:48 -0400 |
commit | 0d8e681dcc30774930c373632150b266ce782a14 (patch) | |
tree | 945d08924bf69fcb24b0706b89965728e504fe7a | |
parent | 9dcf1391fe8cf7e09c2e9bb66f7f6c094e6268f5 (diff) |
kern: Add SYS_lseek system call
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | src/sys/include/compat/unix/syscall.h | 8 | ||||
-rw-r--r-- | src/sys/include/sys/syscall.h | 1 | ||||
-rw-r--r-- | src/sys/os/os_filedes.c | 15 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/sys/include/compat/unix/syscall.h b/src/sys/include/compat/unix/syscall.h index a031872..42dc4c0 100644 --- a/src/sys/include/compat/unix/syscall.h +++ b/src/sys/include/compat/unix/syscall.h @@ -73,6 +73,11 @@ scret_t sys_read(struct syscall_args *scargs); */ scret_t sys_close(struct syscall_args *scargs); +/* + * Seek a file descriptor + */ +scret_t sys_lseek(struct syscall_args *scargs); + #ifdef _NEED_UNIX_SCTAB scret_t(*g_unix_sctab[])(struct syscall_args *) = { [SYS_none] = NULL, @@ -89,7 +94,8 @@ scret_t(*g_unix_sctab[])(struct syscall_args *) = { [SYS_waitpid] = sys_waitpid, [SYS_dmsio] = sys_dmsio, [SYS_read] = sys_read, - [SYS_close] = sys_close + [SYS_close] = sys_close, + [SYS_lseek] = sys_lseek }; #endif /* !_NEED_UNIX_SCTAB */ diff --git a/src/sys/include/sys/syscall.h b/src/sys/include/sys/syscall.h index 77b7505..c97d5ea 100644 --- a/src/sys/include/sys/syscall.h +++ b/src/sys/include/sys/syscall.h @@ -58,6 +58,7 @@ #define SYS_dmsio 0x0D /* DMS I/O */ #define SYS_read 0x0E /* read a file descriptor */ #define SYS_close 0x0F /* close a file */ +#define SYS_lseek 0x10 /* seek to end of 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 3cbbc6f..36748a6 100644 --- a/src/sys/os/os_filedes.c +++ b/src/sys/os/os_filedes.c @@ -416,3 +416,18 @@ sys_open(struct syscall_args *scargs) return fd_open(pathbuf, mode); } + +/* + * ARG0: Fd + * ARG1: Offset + * ARG2: Whence + */ +scret_t +sys_lseek(struct syscall_args *scargs) +{ + int fd = SCARG(scargs, int, 0); + off_t off = SCARG(scargs, off_t, 1); + int whence = SCARG(scargs, int, 2); + + return lseek(fd, off, whence); +} |