diff options
author | Max Kellermann <max@duempel.org> | 2008-12-30 16:28:13 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-12-30 16:28:13 +0100 |
commit | 6c0f5fc6125a478fd50074880ed7fcac9fd9063e (patch) | |
tree | 0249671839bc1ccf0211838fab4f9176d59aa026 /src/daemon.c | |
parent | 671480814c643cd094978e4a0db76687fbddec4f (diff) | |
download | mpd-6c0f5fc6125a478fd50074880ed7fcac9fd9063e.tar.gz mpd-6c0f5fc6125a478fd50074880ed7fcac9fd9063e.tar.xz mpd-6c0f5fc6125a478fd50074880ed7fcac9fd9063e.zip |
listen: moved redirect_stdin() to daemon.c
redirect_stdin() is a daemonization function, and disconnecting from
the standard input is always a good idea for MPD.
Diffstat (limited to 'src/daemon.c')
-rw-r--r-- | src/daemon.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/daemon.c b/src/daemon.c index 09cd5721a..569494908 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -24,6 +24,32 @@ #include <unistd.h> #include <errno.h> #include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +void +daemonize_close_stdin(void) +{ + int fd, st; + struct stat ss; + + 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 (!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 daemonize(Options *options) |