From 42ad59bdb6df99ccd146d6d67cb8c838be709ec5 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Tue, 26 Mar 2024 18:25:07 -0400 Subject: kernel: Add sys_close() Signed-off-by: Ian Moffett --- sys/include/sys/filedesc.h | 1 + sys/include/sys/syscall.h | 1 + sys/kern/kern_filedesc.c | 10 ++++++++++ sys/kern/kern_syscall.c | 1 + 4 files changed, 13 insertions(+) diff --git a/sys/include/sys/filedesc.h b/sys/include/sys/filedesc.h index 6eb500e..e0835a5 100644 --- a/sys/include/sys/filedesc.h +++ b/sys/include/sys/filedesc.h @@ -58,6 +58,7 @@ int open(const char *pathname, int oflag); uint64_t sys_write(struct syscall_args *args); uint64_t sys_open(struct syscall_args *args); +uint64_t sys_close(struct syscall_args *args); #endif #endif diff --git a/sys/include/sys/syscall.h b/sys/include/sys/syscall.h index 0f066e5..5020d3a 100644 --- a/sys/include/sys/syscall.h +++ b/sys/include/sys/syscall.h @@ -40,6 +40,7 @@ enum { SYS_exit = 1, SYS_write, SYS_open, + SYS_close, __MAX_SYSCALLS }; diff --git a/sys/kern/kern_filedesc.c b/sys/kern/kern_filedesc.c index c429125..6f59508 100644 --- a/sys/kern/kern_filedesc.c +++ b/sys/kern/kern_filedesc.c @@ -330,3 +330,13 @@ sys_open(struct syscall_args *args) dynfree(pathbuf); return ret; } + +/* + * arg0: fd + */ +uint64_t +sys_close(struct syscall_args *args) +{ + fd_close_fdnum(this_td(), args->arg0); + return 0; +} diff --git a/sys/kern/kern_syscall.c b/sys/kern/kern_syscall.c index dc37274..4acfdc5 100644 --- a/sys/kern/kern_syscall.c +++ b/sys/kern/kern_syscall.c @@ -44,4 +44,5 @@ uint64_t(*g_syscall_table[__MAX_SYSCALLS])(struct syscall_args *args) = { sys_exit, sys_write, sys_open, + sys_close, }; -- cgit v1.2.3