aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichal Nazarewicz <mina86@mina86.com>2009-07-22 13:43:21 +0200
committerMax Kellermann <max@duempel.org>2009-07-22 13:43:21 +0200
commitbfed1c04cc13ec01fa7bb6c250662f5dfb8c7931 (patch)
tree093babf82dd46a048db315704006d8e01d135fce /src
parentbdb1965b506ee97e7e8a07253e29c2f4cc3d6bf6 (diff)
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.c14
-rw-r--r--src/daemon.h5
2 files changed, 7 insertions, 12 deletions
diff --git a/src/daemon.c b/src/daemon.c
index 43d16bc9..5ae79e05 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 1332eaf4..a2994560 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.