OLD | NEW |
(Empty) | |
| 1 #define _GNU_SOURCE |
| 2 #include <unistd.h> |
| 3 #include <errno.h> |
| 4 #include <fcntl.h> |
| 5 #include "syscall.h" |
| 6 #include "libc.h" |
| 7 |
| 8 int __dup3(int old, int new, int flags) |
| 9 { |
| 10 int r; |
| 11 #ifdef SYS_dup2 |
| 12 if (old==new) return __syscall_ret(-EINVAL); |
| 13 if (flags & O_CLOEXEC) { |
| 14 while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); |
| 15 if (r!=-ENOSYS) return __syscall_ret(r); |
| 16 } |
| 17 while ((r=__syscall(SYS_dup2, old, new))==-EBUSY); |
| 18 if (flags & O_CLOEXEC) __syscall(SYS_fcntl, new, F_SETFD, FD_CLOEXEC); |
| 19 #else |
| 20 while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); |
| 21 #endif |
| 22 return __syscall_ret(r); |
| 23 } |
| 24 |
| 25 weak_alias(__dup3, dup3); |
OLD | NEW |