You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
759 B

32 years ago
32 years ago
32 years ago
32 years ago
  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. #include <fcntl.h>
  14. #include <unistd.h>
  15. #define BADEXIT -1
  16. int
  17. dup2(int fd1, int fd2)
  18. {
  19. if (fd1 != fd2) {
  20. if (fcntl(fd1, F_GETFL) < 0)
  21. return BADEXIT;
  22. if (fcntl(fd2, F_GETFL) >= 0)
  23. close(fd2);
  24. if (fcntl(fd1, F_DUPFD, fd2) < 0)
  25. return BADEXIT;
  26. }
  27. return fd2;
  28. }