1*c9945492SAndroid Build Coastguard Worker #include <unistd.h> 2*c9945492SAndroid Build Coastguard Worker #include <errno.h> 3*c9945492SAndroid Build Coastguard Worker #include <fcntl.h> 4*c9945492SAndroid Build Coastguard Worker #include "syscall.h" 5*c9945492SAndroid Build Coastguard Worker dup2(int old,int new)6*c9945492SAndroid Build Coastguard Workerint dup2(int old, int new) 7*c9945492SAndroid Build Coastguard Worker { 8*c9945492SAndroid Build Coastguard Worker int r; 9*c9945492SAndroid Build Coastguard Worker #ifdef SYS_dup2 10*c9945492SAndroid Build Coastguard Worker while ((r=__syscall(SYS_dup2, old, new))==-EBUSY); 11*c9945492SAndroid Build Coastguard Worker #else 12*c9945492SAndroid Build Coastguard Worker if (old==new) { 13*c9945492SAndroid Build Coastguard Worker r = __syscall(SYS_fcntl, old, F_GETFD); 14*c9945492SAndroid Build Coastguard Worker if (r >= 0) return old; 15*c9945492SAndroid Build Coastguard Worker } else { 16*c9945492SAndroid Build Coastguard Worker while ((r=__syscall(SYS_dup3, old, new, 0))==-EBUSY); 17*c9945492SAndroid Build Coastguard Worker } 18*c9945492SAndroid Build Coastguard Worker #endif 19*c9945492SAndroid Build Coastguard Worker return __syscall_ret(r); 20*c9945492SAndroid Build Coastguard Worker } 21