| OLD | NEW |
| 1 /////////////////////////////////////////////////////////////////////////////// | 1 /////////////////////////////////////////////////////////////////////////////// |
| 2 // | 2 // |
| 3 /// \file tuklib_open_stdxxx.c | 3 /// \file tuklib_open_stdxxx.c |
| 4 /// \brief Make sure that file descriptors 0, 1, and 2 are open | 4 /// \brief Make sure that file descriptors 0, 1, and 2 are open |
| 5 // | 5 // |
| 6 // Author: Lasse Collin | 6 // Author: Lasse Collin |
| 7 // | 7 // |
| 8 // This file has been put into the public domain. | 8 // This file has been put into the public domain. |
| 9 // You can do whatever you want with this file. | 9 // You can do whatever you want with this file. |
| 10 // | 10 // |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 // We use fcntl() to check if the file descriptor is open. | 32 // We use fcntl() to check if the file descriptor is open. |
| 33 if (fcntl(i, F_GETFD) == -1 && errno == EBADF) { | 33 if (fcntl(i, F_GETFD) == -1 && errno == EBADF) { |
| 34 // With stdin, we could use /dev/full so that | 34 // With stdin, we could use /dev/full so that |
| 35 // writing to stdin would fail. However, /dev/full | 35 // writing to stdin would fail. However, /dev/full |
| 36 // is Linux specific, and if the program tries to | 36 // is Linux specific, and if the program tries to |
| 37 // write to stdin, there's already a problem anyway. | 37 // write to stdin, there's already a problem anyway. |
| 38 const int fd = open("/dev/null", O_NOCTTY | 38 const int fd = open("/dev/null", O_NOCTTY |
| 39 | (i == 0 ? O_WRONLY : O_RDONLY)); | 39 | (i == 0 ? O_WRONLY : O_RDONLY)); |
| 40 | 40 |
| 41 if (fd != i) { | 41 if (fd != i) { |
| 42 if (fd != -1) |
| 43 (void)close(fd); |
| 44 |
| 42 // Something went wrong. Exit with the | 45 // Something went wrong. Exit with the |
| 43 // exit status we were given. Don't try | 46 // exit status we were given. Don't try |
| 44 // to print an error message, since stderr | 47 // to print an error message, since stderr |
| 45 // may very well be non-existent. This | 48 // may very well be non-existent. This |
| 46 // error should be extremely rare. | 49 // error should be extremely rare. |
| 47 (void)close(fd); | |
| 48 exit(err_status); | 50 exit(err_status); |
| 49 } | 51 } |
| 50 } | 52 } |
| 51 } | 53 } |
| 52 #endif | 54 #endif |
| 53 | 55 |
| 54 return; | 56 return; |
| 55 } | 57 } |
| OLD | NEW |