diff options
Diffstat (limited to 'src/daemon.c')
-rw-r--r-- | src/daemon.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/src/daemon.c b/src/daemon.c index 569494908..913f06f89 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -31,24 +31,14 @@ void daemonize_close_stdin(void) { - int fd, st; - struct stat ss; + int fd = open("/dev/null", O_RDONLY); - if ((st = fstat(STDIN_FILENO, &ss)) < 0) { - if ((fd = open("/dev/null", O_RDONLY) > 0)) { - g_debug("stdin closed, and could not open /dev/null " - "as fd=0, some external library bugs " - "may be exposed..."); - close(fd); - } - return; + if (fd < 0) + close(STDIN_FILENO); + else if (fd != STDIN_FILENO) { + dup2(fd, STDIN_FILENO); + close(fd); } - if (!isatty(STDIN_FILENO)) - return; - if ((fd = open("/dev/null", O_RDONLY)) < 0) - g_error("failed to open /dev/null %s", strerror(errno)); - if (dup2(fd, STDIN_FILENO) < 0) - g_error("dup2 stdin: %s", strerror(errno)); } void |