aboutsummaryrefslogtreecommitdiff
path: root/pk/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'pk/file.c')
-rw-r--r--pk/file.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/pk/file.c b/pk/file.c
index 53087c3..502ff6a 100644
--- a/pk/file.c
+++ b/pk/file.c
@@ -53,6 +53,20 @@ int file_dup(file_t* f)
return -1;
}
+int file_dup3(file_t* f, int newfd)
+{
+ if (newfd < 0 || newfd >= MAX_FDS)
+ return -1;
+
+ if (atomic_cas(&fds[newfd], 0, f) == 0)
+ {
+ file_incref(f);
+ return newfd;
+ }
+
+ return -1;
+}
+
void file_init()
{
// create stdin, stdout, stderr and FDs 0-2