#include <unistd.h> | |
#include <errno.h> | |
#include <fcntl.h> | |
#include "syscall.h" | |
int dup2(int old, int new) { | |
int r; | |
#ifdef SYS_dup2 | |
while ((r = __syscall(SYS_dup2, old, new)) == -EBUSY) | |
; | |
#else | |
if (old == new) { | |
r = __syscall(SYS_fcntl, old, F_GETFD); | |
if (r >= 0) | |
return old; | |
} else { | |
while ((r = __syscall(SYS_dup3, old, new, 0)) == -EBUSY) | |
; | |
} | |
#endif | |
return __syscall_ret(r); | |
} |