| #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); | |
| } |