diff options
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; -} |