diff options
Diffstat (limited to 'pk/file.c')
-rw-r--r-- | pk/file.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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 |