summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-10-17 19:58:54 -0400
committerIan Moffett <ian@osmora.org>2025-10-17 20:03:48 -0400
commit0d8e681dcc30774930c373632150b266ce782a14 (patch)
tree945d08924bf69fcb24b0706b89965728e504fe7a
parent9dcf1391fe8cf7e09c2e9bb66f7f6c094e6268f5 (diff)
kern: Add SYS_lseek system call
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--src/sys/include/compat/unix/syscall.h8
-rw-r--r--src/sys/include/sys/syscall.h1
-rw-r--r--src/sys/os/os_filedes.c15
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);
+}