diff options
author | Michal Nazarewicz <mina86@mina86.com> | 2009-07-22 13:43:21 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-07-22 13:43:21 +0200 |
commit | bfed1c04cc13ec01fa7bb6c250662f5dfb8c7931 (patch) | |
tree | 093babf82dd46a048db315704006d8e01d135fce /src | |
parent | bdb1965b506ee97e7e8a07253e29c2f4cc3d6bf6 (diff) | |
download | mpd-bfed1c04cc13ec01fa7bb6c250662f5dfb8c7931.tar.gz mpd-bfed1c04cc13ec01fa7bb6c250662f5dfb8c7931.tar.xz mpd-bfed1c04cc13ec01fa7bb6c250662f5dfb8c7931.zip |
daemon: daemonize_close_stdin() optimised.
Changed function to first close standard input (this may
fail but we don't care) and then try to open /dev/null (this
may fail but it shouldn't on Unix platforms plus we don't
know what to do in such case anyways). Since standard input
has the "zeroth" descriptor number next "open" will use it.
Since there is no "/dev/null" on Windows (It's not even
a valid path!) the second step is skipped if WIN32 is
defined.
As a final touch, since the function consists of merely two
function calls it has been moved to header file and declared
static inline.
[mk: un-inline daemonize_close_stdin()]
Diffstat (limited to 'src')
-rw-r--r-- | src/daemon.c | 14 | ||||
-rw-r--r-- | src/daemon.h | 5 |
2 files changed, 7 insertions, 12 deletions
diff --git a/src/daemon.c b/src/daemon.c index 43d16bc9b..5ae79e050 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -85,23 +85,13 @@ daemonize_kill(void) exit(EXIT_SUCCESS); } -#endif - void daemonize_close_stdin(void) { - int fd = open("/dev/null", O_RDONLY); - - if (fd < 0) - close(STDIN_FILENO); - else if (fd != STDIN_FILENO) { - dup2(fd, STDIN_FILENO); - close(fd); - } + close(STDIN_FILENO); + open("/dev/null", O_RDONLY); } -#ifndef WIN32 - void daemonize_set_user(void) { diff --git a/src/daemon.h b/src/daemon.h index 1332eaf48..a29945607 100644 --- a/src/daemon.h +++ b/src/daemon.h @@ -56,8 +56,13 @@ daemonize_kill(void) /** * Close stdin (fd 0) and re-open it as /dev/null. */ +#ifndef WIN32 void daemonize_close_stdin(void); +#else +static inline void +daemonize_close_stdin(void) {} +#endif /** * Change to the configured Unix user. |