2 dup2 -- 7th Edition UNIX system call emulation for UNIX System V
4 last edit: 11-Feb-1987 D A Gwyn
14 extern int close(), fcntl();
18 int oldfd; /* already-open file descriptor */
19 int newfd; /* desired duplicate descriptor */
21 register int ret; /* for fcntl() return value */
22 register int save; /* for saving entry errno */
25 return oldfd; /* be careful not to close() */
27 save = errno; /* save entry errno */
28 (void) close( newfd ); /* in case newfd is open */
29 /* (may have just clobbered the original errno value) */
31 ret = fcntl( oldfd, F_DUPFD, newfd ); /* dupe it */
34 errno = save; /* restore entry errno */
35 else /* fcntl() returned error */
36 if ( errno == EINVAL )
37 errno = EBADF; /* we think of everything */
39 return ret; /* return file descriptor */