From 231301a6190605bd3ced4d961ee0d5d3fcd49d65 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Mon, 29 Apr 2024 22:00:55 +0200 Subject: Kernel/IRC: Add setsockopt and move IRC client to use new socket interface --- kernel/syscalls/lseek.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 kernel/syscalls/lseek.c (limited to 'kernel/syscalls/lseek.c') diff --git a/kernel/syscalls/lseek.c b/kernel/syscalls/lseek.c new file mode 100644 index 0000000..3e38822 --- /dev/null +++ b/kernel/syscalls/lseek.c @@ -0,0 +1,34 @@ +#include +#include +#include + +// FIXME: These should be in a shared header file with libc +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +off_t syscall_lseek(int fd, off_t offset, int whence) { + vfs_fd_t *fd_ptr = get_vfs_fd(fd, NULL); + if (!fd_ptr) { + return -EBADF; + } + + off_t ret_offset = fd_ptr->offset; + switch (whence) { + case SEEK_SET: + ret_offset = offset; + break; + case SEEK_CUR: + ret_offset += offset; + break; + case SEEK_END: + assert(fd_ptr->inode); + ret_offset = fd_ptr->inode->file_size + offset; + break; + default: + return -EINVAL; + break; + } + fd_ptr->offset = ret_offset; + return ret_offset; +} -- cgit v1.2.3