From ac58dce7df97a97b8e2d71a76b5fa8805653959a Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Wed, 5 Sep 2007 01:19:37 +0000
Subject: Redirect stdin *before* we establish a listen socket

This way we'll avoid listening on fd=0 and have a better
chance of having fd=0 as /dev/null

git-svn-id: https://svn.musicpd.org/mpd/trunk@6852 09075e82-0dd4-0310-85a5-a0d7c8717e4f
---
 src/listen.c | 29 +++++++++++++++++++++++++++++
 src/log.c    | 29 -----------------------------
 2 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/src/listen.c b/src/listen.c
index 8b89ee33a..521834a63 100644
--- a/src/listen.c
+++ b/src/listen.c
@@ -50,6 +50,34 @@ static int *listenSockets;
 static int numberOfListenSockets;
 int boundPort;
 
+/*
+ * 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) {
+		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));
+	if (dup2(fd, STDIN_FILENO) < 0)
+		FATAL("dup2 stdin: %s\n", strerror(errno));
+}
+
 static int establishListen(unsigned int port,
                            struct sockaddr *addrp, socklen_t addrlen)
 {
@@ -196,6 +224,7 @@ void listenOnPort(void)
 
 	boundPort = port;
 
+	redirect_stdin();
 	do {
 		parseListenConfigParam(port, param);
 	} while ((param = getNextConfigParam(CONF_BIND_TO_ADDRESS, param)));
diff --git a/src/log.c b/src/log.c
index 46f35c224..56e63ed25 100644
--- a/src/log.c
+++ b/src/log.c
@@ -39,34 +39,6 @@ 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
- * 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) {
-		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));
-	if (dup2(fd, STDIN_FILENO) < 0)
-		FATAL("dup2 stdin: %s\n", strerror(errno));
-}
-
 static void redirect_logs(void)
 {
 	assert(out_fd > 0);
@@ -197,7 +169,6 @@ void setup_log_output(const int use_stdout)
 		stdout_mode = 0;
 		flushWarningLog();
 	}
-	redirect_stdin();
 }
 
 #define log_func(func,level,fp) \
-- 
cgit v1.2.3