From 529743d354ac402b1302b397159146fa46c180c5 Mon Sep 17 00:00:00 2001 From: julian Date: Mon, 22 Jan 1996 00:23:58 +0000 Subject: Reviewed by: julian Submitted by: john birrel One version of the pthreads library another will follow with differnt actions under some cases.. not QUITE complete --- lib/libc_r/uthread/uthread_dup.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 lib/libc_r/uthread/uthread_dup.c (limited to 'lib/libc_r/uthread/uthread_dup.c') diff --git a/lib/libc_r/uthread/uthread_dup.c b/lib/libc_r/uthread/uthread_dup.c new file mode 100644 index 0000000..e6c4598 --- /dev/null +++ b/lib/libc_r/uthread/uthread_dup.c @@ -0,0 +1,37 @@ +#include +#ifdef _THREAD_SAFE +#include +#include "pthread_private.h" + +int +dup(int fd) +{ + int ret; + + /* Lock the file descriptor: */ + if ((ret = _thread_fd_lock(fd, FD_RDWR, NULL, __FILE__, __LINE__)) == 0) { + /* Perform the 'dup' syscall: */ + if ((ret = _thread_sys_dup(fd)) < 0) { + } + /* Initialise the file descriptor table entry: */ + else if (_thread_fd_table_init(ret) != 0) { + /* Quietly close the file: */ + _thread_sys_close(ret); + + /* Reset the file descriptor: */ + ret = -1; + } else { + /* + * Save the file open flags so that they can be + * checked later: + */ + _thread_fd_table[ret]->flags = _thread_fd_table[fd]->flags; + } + + /* Unlock the file descriptor: */ + _thread_fd_unlock(fd, FD_RDWR); + } + /* Return the completion status: */ + return (ret); +} +#endif -- cgit v1.1