diff options
author | Anton Kling <anton@kling.gg> | 2024-04-17 17:06:16 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-04-17 17:06:16 +0200 |
commit | 620d37f41747e943648544d1fd1567d386c91e04 (patch) | |
tree | bd6d616aca8a853f3b90cfd176bba4d37575e42a /kernel/syscalls | |
parent | d0cca44913356f8ce15e15216b0e26c2e74b4d06 (diff) |
Kernel/LibC: Add fstat() and remove stat() syscall
Diffstat (limited to 'kernel/syscalls')
-rw-r--r-- | kernel/syscalls/fstat.c | 11 | ||||
-rw-r--r-- | kernel/syscalls/stat.c | 15 |
2 files changed, 11 insertions, 15 deletions
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 <errno.h> +#include <fs/vfs.h> +#include <syscalls.h> + +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 <errno.h> -#include <fs/vfs.h> -#include <syscalls.h> - -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; -} |