summaryrefslogtreecommitdiff
path: root/src/sys/os/os_filedes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/os/os_filedes.c')
-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
*/