1 /* $OpenBSD: uthread_dup.c,v 1.5 2003/02/05 05:51:51 marc Exp $ */ 2 /* PUBLIC DOMAIN <marc@snafu.org> */ 3 4 #include <unistd.h> 5 #ifdef _THREAD_SAFE 6 #include <pthread.h> 7 #include "pthread_private.h" 8 9 int dup(int fd)10dup(int fd) 11 { 12 int ret; 13 14 ret = _FD_LOCK(fd, FD_RDWR, NULL); 15 if (ret == 0) { 16 ret = _thread_sys_dup(fd); 17 if (ret != -1) 18 if (_thread_fd_table_dup(fd, ret) == -1) { 19 close(ret); 20 ret = -1; 21 } 22 _FD_UNLOCK(fd, FD_RDWR); 23 } 24 return (ret); 25 } 26 #endif 27