From 32772a7a9b1fda871ec01979763b5b75fc8f3b60 Mon Sep 17 00:00:00 2001 From: Matheus Date: Tue, 9 May 2023 23:07:29 -0300 Subject: [PATCH] file: change fd_new and flag converter --- kernel-src/fs/file.c | 4 +--- kernel-src/include/kernel/file.h | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/kernel-src/fs/file.c b/kernel-src/fs/file.c index d318f258..cb497c06 100644 --- a/kernel-src/fs/file.c +++ b/kernel-src/fs/file.c @@ -59,7 +59,7 @@ void fd_release(file_t *file) { FILE_RELEASE(file); } -int fd_new(vnode_t *vnode, int flags, file_t **rfile, int *rfd) { +int fd_new(int flags, file_t **rfile, int *rfd) { file_t *file = newfile(); if (file == NULL) return ENOMEM; @@ -93,8 +93,6 @@ int fd_new(vnode_t *vnode, int flags, file_t **rfile, int *rfd) { spinlock_release(&proc->fdlock); - VOP_HOLD(vnode); - file->vnode = vnode; *rfile = file; *rfd = fd; return 0; diff --git a/kernel-src/include/kernel/file.h b/kernel-src/include/kernel/file.h index 5005d15c..342a2a3f 100644 --- a/kernel-src/include/kernel/file.h +++ b/kernel-src/include/kernel/file.h @@ -20,8 +20,24 @@ typedef struct fd_t { file_t *fd_get(int fd); void fd_release(file_t *file); -int fd_new(vnode_t *node, int flags, file_t **file, int *fd); +int fd_new(int flags, file_t **file, int *fd); int fd_close(int fd); int fd_dup(int oldfd, int newfd, bool exact, int flags, int *ret); +#define FILE_READ 1 +#define FILE_WRITE 2 +#define FILE_KNOWN_FLAGS 3 + +static inline int fileflagstovnodeflags(int flags) { + int vnflags = 0; + if (flags & FILE_READ) + vnflags |= V_FFLAGS_READ; + if (flags & FILE_WRITE) + vnflags |= V_FFLAGS_WRITE; + + return vnflags; +} + +#define AT_FDCWD -100 + #endif