summaryrefslogtreecommitdiff
path: root/kernel/fs/vfs.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-11-22 22:33:06 +0100
committerAnton Kling <anton@kling.gg>2024-11-22 22:33:06 +0100
commit8fa2af9678b9e257a1dfb1e5111f35d22366f2c6 (patch)
treed82d3b9678b2fcfdc901455f4ca2ed13dc49aaa7 /kernel/fs/vfs.c
parent8827f3033d76b0d9c7d8d8225077176a813f7f49 (diff)
vfs: Add dup()
Diffstat (limited to 'kernel/fs/vfs.c')
-rw-r--r--kernel/fs/vfs.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c
index 9684a18..1f28f13 100644
--- a/kernel/fs/vfs.c
+++ b/kernel/fs/vfs.c
@@ -395,6 +395,19 @@ vfs_vm_object_t *vfs_get_vm_object(int fd, u64 length, u64 offset) {
return r;
}
+int vfs_dup(int fd) {
+ vfs_fd_t *ptr = get_vfs_fd(fd, NULL);
+ if (!ptr) {
+ return -EBADF;
+ }
+ int index;
+ if (!relist_add(&current_task->file_descriptors, ptr, &index)) {
+ return -EMFILE;
+ }
+ ptr->reference_count++;
+ return index;
+}
+
int vfs_dup2(int org_fd, int new_fd) {
if (org_fd == new_fd) {
return -EINVAL;