summaryrefslogtreecommitdiff
path: root/src/kernel/syscalls.c
diff options
context:
space:
mode:
authordzwdz2021-09-04 19:34:51 +0200
committerdzwdz2021-09-04 19:34:51 +0200
commit613de4db61dd99e7d2049b0a303e167fa711030b (patch)
tree84b577c30aac3ac7f8360fcc7aa78f7d29479538 /src/kernel/syscalls.c
parentc4531fa5e1aa16b7ba74de2975eadf06b3052b78 (diff)
new vfs impl pt. 1: implement open()
Diffstat (limited to 'src/kernel/syscalls.c')
-rw-r--r--src/kernel/syscalls.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c
index 002f3fd..8f520ab 100644
--- a/src/kernel/syscalls.c
+++ b/src/kernel/syscalls.c
@@ -89,16 +89,19 @@ handle_t _syscall_fs_open(const user_ptr path, int len) {
mount = vfs_mount_resolve(process_current->mount, buffer, len);
if (!mount) return -1;
- res = -1; // TODO pass to filesystem
- if (res < 0)
- return res;
- else
- return handle;
+ vfs_backend_dispatch(mount->backend, (struct vfs_op) {
+ .type = VFSOP_OPEN,
+ .open = {
+ .path = &buffer[mount->prefix_len],
+ .path_len = len - mount->prefix_len,
+ }
+ });
+ // doesn't return. TODO mark as noreturn
}
int _syscall_fd_mount(handle_t handle, const user_ptr path, int len) {
struct virt_iter iter;
- struct vfs_mount *mount;
+ struct vfs_mount *mount = NULL;
char *path_buf;
int res;