From 973bba5e495c298f77deb6921080e35425458233 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 8 Feb 2025 20:26:16 -0300 Subject: [PATCH] fix shutdown --- kernel-src/sys/syscalls/shutdown.c | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 kernel-src/sys/syscalls/shutdown.c diff --git a/kernel-src/sys/syscalls/shutdown.c b/kernel-src/sys/syscalls/shutdown.c new file mode 100644 index 00000000..c30cc75a --- /dev/null +++ b/kernel-src/sys/syscalls/shutdown.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +syscallret_t syscall_shutdown(context_t *, int fd, int how) { + syscallret_t ret = { + .ret = -1 + }; + + ++how; // convert to internal meaning + + file_t *file = fd_get(fd); + if (file == NULL) { + ret.errno = EBADF; + return ret; + } + + if (file->vnode->type != V_TYPE_SOCKET) { + ret.errno = ENOTSOCK; + goto cleanup; + } + + socket_t *socket = SOCKFS_SOCKET_FROM_NODE(file->vnode); + + ret.errno = socket->ops->shutdown(socket, how); + ret.ret = ret.errno ? -1 : 0; + + cleanup: + + fd_release(file); + return ret; +}