Home | History | Annotate | Download | only in Python
      1 /*
      2  * Public domain dup2() lookalike
      3  * by Curtis Jackson @ AT&T Technologies, Burlington, NC
      4  * electronic address:  burl!rcj
      5  *
      6  * dup2 performs the following functions:
      7  *
      8  * Check to make sure that fd1 is a valid open file descriptor.
      9  * Check to see if fd2 is already open; if so, close it.
     10  * Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd.
     11  * Return fd2 if all went well; return BADEXIT otherwise.
     12  */
     13 
     14 #include <fcntl.h>
     15 #include <unistd.h>
     16 
     17 #define BADEXIT -1
     18 
     19 int
     20 dup2(int fd1, int fd2)
     21 {
     22 	if (fd1 != fd2) {
     23 		if (fcntl(fd1, F_GETFL) < 0)
     24 			return BADEXIT;
     25 		if (fcntl(fd2, F_GETFL) >= 0)
     26 			close(fd2);
     27 		if (fcntl(fd1, F_DUPFD, fd2) < 0)
     28 			return BADEXIT;
     29 	}
     30 	return fd2;
     31 }
     32