diff options
Diffstat (limited to 'src/sys/os/os_filedes.c')
-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 */ |