|  | /* | 
|  | * Public domain dup2() lookalike | 
|  | * by Curtis Jackson @ AT&T Technologies, Burlington, NC | 
|  | * electronic address:  burl!rcj | 
|  | * | 
|  | * dup2 performs the following functions: | 
|  | * | 
|  | * Check to make sure that fd1 is a valid open file descriptor. | 
|  | * Check to see if fd2 is already open; if so, close it. | 
|  | * Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd. | 
|  | * Return fd2 if all went well; return BADEXIT otherwise. | 
|  | */ | 
|  |  | 
|  | #include <fcntl.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | #define BADEXIT -1 | 
|  |  | 
|  | int | 
|  | dup2(int fd1, int fd2) | 
|  | { | 
|  | if (fd1 != fd2) { | 
|  | if (fcntl(fd1, F_GETFL) < 0) | 
|  | return BADEXIT; | 
|  | if (fcntl(fd2, F_GETFL) >= 0) | 
|  | close(fd2); | 
|  | if (fcntl(fd1, F_DUPFD, fd2) < 0) | 
|  | return BADEXIT; | 
|  | } | 
|  | return fd2; | 
|  | } |