use daemon() when the C library provides it

For systems that cannot support fork() (like no-mmu Linux), use daemon() if
it is available for the daemonizing code.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2009-08-12 21:03:02 -04:00 committed by Max Kellermann
parent c3e02bec3b
commit 499ed62dd7
2 changed files with 19 additions and 7 deletions

View File

@ -100,7 +100,7 @@ dnl
dnl libc features dnl libc features
dnl dnl
AC_CHECK_FUNCS(syslog) AC_CHECK_FUNCS(daemon fork syslog)
if test $ac_cv_func_syslog = no; then if test $ac_cv_func_syslog = no; then
# syslog is not in the default libraries. See if it's in some other. # syslog is not in the default libraries. See if it's in some other.
for lib in bsd socket inet; do for lib in bsd socket inet; do

View File

@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#include "config.h"
#include "daemon.h" #include "daemon.h"
#include <glib.h> #include <glib.h>
@ -128,21 +129,28 @@ daemonize_set_user(void)
static void static void
daemonize_detach(void) daemonize_detach(void)
{ {
pid_t pid;
/* flush all file handles before duplicating the buffers */ /* flush all file handles before duplicating the buffers */
fflush(NULL); fflush(NULL);
#ifdef HAVE_DAEMON
if (daemon(0, 1))
g_error("daemon() failed: %s", g_strerror(errno));
#elif defined(HAVE_FORK)
/* detach from parent process */ /* detach from parent process */
pid = fork(); switch (fork()) {
if (pid < 0) case -1:
g_error("fork() failed: %s", g_strerror(errno)); g_error("fork() failed: %s", g_strerror(errno));
case 0:
if (pid > 0) break;
default:
/* exit the parent process */ /* exit the parent process */
_exit(EXIT_SUCCESS); _exit(EXIT_SUCCESS);
}
/* release the current working directory */ /* release the current working directory */
@ -153,6 +161,10 @@ daemonize_detach(void)
setsid(); setsid();
#else
g_error("no support for daemonizing");
#endif
g_debug("daemonized!"); g_debug("daemonized!");
} }