From 29d459bdabda81f8e07cdd440ab0e09a73f6e758 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 1 Sep 2024 13:11:27 -0300 Subject: [PATCH] file: fd_insert --- kernel-src/fs/file.c | 23 +++++++++++++++++++++++ kernel-src/include/kernel/file.h | 1 + 2 files changed, 24 insertions(+) diff --git a/kernel-src/fs/file.c b/kernel-src/fs/file.c index 33336939..a1c827ea 100644 --- a/kernel-src/fs/file.c +++ b/kernel-src/fs/file.c @@ -196,6 +196,29 @@ int fd_clone(proc_t *targproc) { return error; } +int fd_insert(file_t *file, int *fdp) { + proc_t *proc = _cpu()->thread->proc; + int err = 0; + MUTEX_ACQUIRE(&proc->fdmutex, false); + int fd = getfree(0); + + if (fd == -1) { + fd = proc->fdcount; + err = growtable(proc->fdcount); + if (err) + goto cleanup; + } + + proc->fd[fd].file = file; + proc->fd[fd].flags = 0; + FILE_HOLD(file); + *fdp = fd; + + cleanup: + MUTEX_RELEASE(&proc->fdmutex); + return err; +} + int fd_dup(int oldfd, int newfd, bool exact, int fdflags, int *retfd) { proc_t *proc = _cpu()->thread->proc; int err = 0; diff --git a/kernel-src/include/kernel/file.h b/kernel-src/include/kernel/file.h index 96d8aa6d..8d397bfb 100644 --- a/kernel-src/include/kernel/file.h +++ b/kernel-src/include/kernel/file.h @@ -28,6 +28,7 @@ int fd_dup(int oldfd, int newfd, bool exact, int flags, int *ret); int fd_clone(proc_t *proc); int fd_setflags(int fd, int flags); int fd_getflags(int fd, int *flags); +int fd_insert(file_t *file, int *fdp); #define FILE_LOCK(x) MUTEX_ACQUIRE(&(x)->mutex, false) #define FILE_UNLOCK(x) MUTEX_RELEASE(&(x)->mutex)