summaryrefslogtreecommitdiff
path: root/src/sys/os
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-10-15 14:49:33 -0400
committerIan Moffett <ian@osmora.org>2025-10-15 14:49:33 -0400
commitfbcc3d9e458b8c3966560028d1f1f10ba4e74d37 (patch)
treef3cef39220a76b3648766175737063f03c8cbd61 /src/sys/os
parentf39d4994c80225986fb6b27ef2ecef9268540b69 (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.c26
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
*/