aboutsummaryrefslogtreecommitdiff
path: root/src/daemon.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-12-30 16:28:13 +0100
committerMax Kellermann <max@duempel.org>2008-12-30 16:28:13 +0100
commit6c0f5fc6125a478fd50074880ed7fcac9fd9063e (patch)
tree0249671839bc1ccf0211838fab4f9176d59aa026 /src/daemon.c
parent671480814c643cd094978e4a0db76687fbddec4f (diff)
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.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/daemon.c b/src/daemon.c
index 09cd5721..56949490 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)