diff options
author | Ian Moffett <ian@osmora.org> | 2025-10-15 14:49:33 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-10-15 14:49:33 -0400 |
commit | fbcc3d9e458b8c3966560028d1f1f10ba4e74d37 (patch) | |
tree | f3cef39220a76b3648766175737063f03c8cbd61 /src/sys/os | |
parent | f39d4994c80225986fb6b27ef2ecef9268540b69 (diff) |
kern: filedesc: Add close() system call
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/os')
-rw-r--r-- | src/sys/os/os_filedes.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/sys/os/os_filedes.c b/src/sys/os/os_filedes.c index 948bad2..95452af 100644 --- a/src/sys/os/os_filedes.c +++ b/src/sys/os/os_filedes.c @@ -197,6 +197,32 @@ fd_open(const char *path, mode_t mode) return fd->fdno; } +int +fd_close(int fd) +{ + struct filedesc *fdp; + struct proc *proc = proc_self(); + struct vnode *vp; + + if (fd < 0) { + return -EBADF; + } + + if (proc == NULL) { + return -EIO; + } + + if ((fdp = fd_get(proc, fd)) == NULL) { + return -EIO; + } + + vp = fdp->vp; + proc->fdtab[fdp->fdno] = NULL; + + kfree(fdp); + return vop_reclaim(vp, 0); +} + /* * Initialize file descriptor table */ |