aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2007-09-05 01:19:37 +0000
committerEric Wong <normalperson@yhbt.net>2007-09-05 01:19:37 +0000
commitac58dce7df97a97b8e2d71a76b5fa8805653959a (patch)
treefe01ad6dc8141757fe435df7576e15b3e7d7263a
parent7992ff37d084847a92ec7496a7fb5625ac45c569 (diff)
downloadmpd-ac58dce7df97a97b8e2d71a76b5fa8805653959a.tar.gz
mpd-ac58dce7df97a97b8e2d71a76b5fa8805653959a.tar.xz
mpd-ac58dce7df97a97b8e2d71a76b5fa8805653959a.zip
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
-rw-r--r--src/listen.c29
-rw-r--r--src/log.c29
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) \