blob: 5ffd9b0a8e9176d8ed4abed45b862b6c9201b1ee [file] [log] [blame]
#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);
}