From 620d37f41747e943648544d1fd1567d386c91e04 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Wed, 17 Apr 2024 17:06:16 +0200 Subject: Kernel/LibC: Add fstat() and remove stat() syscall --- kernel/syscalls/fstat.c | 11 +++++++++++ kernel/syscalls/stat.c | 15 --------------- 2 files changed, 11 insertions(+), 15 deletions(-) create mode 100644 kernel/syscalls/fstat.c delete mode 100644 kernel/syscalls/stat.c (limited to 'kernel/syscalls') diff --git a/kernel/syscalls/fstat.c b/kernel/syscalls/fstat.c new file mode 100644 index 0000000..38346e3 --- /dev/null +++ b/kernel/syscalls/fstat.c @@ -0,0 +1,11 @@ +#include +#include +#include + +int syscall_fstat(int fd, struct stat *buf) { + if (!mmu_is_valid_userpointer(buf, sizeof(struct stat))) { + return -EPERM; // TODO: Is this correct? The spec says nothing about + // this case. + } + return vfs_fstat(fd, buf); +} diff --git a/kernel/syscalls/stat.c b/kernel/syscalls/stat.c deleted file mode 100644 index 83ad3f0..0000000 --- a/kernel/syscalls/stat.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include - -int syscall_stat(SYS_STAT_PARAMS *args) { - const char *pathname = copy_and_allocate_user_string(args->pathname); - struct stat *statbuf = args->statbuf; - int fd = vfs_open(pathname, O_READ, 0); - if (0 > fd) { - return -ENOENT; - } - int rc = vfs_fstat(fd, statbuf); - vfs_close(fd); - return rc; -} -- cgit v1.2.3