diff options
-rw-r--r-- | src/log.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -39,13 +39,27 @@ static int err_fd = -1; static const char *out_filename; static const char *err_filename; -/* redirect stdin to /dev/null to work around a libao bug */ +/* + * redirect stdin to /dev/null to work around a libao bug + * there are likely other bugs in other libraries (and even our code!) + * that check for fd > 0, so it's easiest to just keep + * fd = 0 == /dev/null for now... + */ static void redirect_stdin(void) { int fd, st; struct stat ss; - if ((st = fstat(STDIN_FILENO, &ss)) < 0 || ! isatty(STDIN_FILENO)) + if ((st = fstat(STDIN_FILENO, &ss)) < 0) { + if ((fd = open("/dev/null", O_RDONLY) > 0)) + DEBUG("stdin closed, and could not open /dev/null " + "as fd=0, some external library bugs " + "may be exposed...\n"); + close(fd); + } + return; + } + if (!isatty(STDIN_FILENO)) return; if ((fd = open("/dev/null", O_RDONLY)) < 0) FATAL("failed to open /dev/null %s\n", strerror(errno)); |