Commit 499ed62d authored by Mike Frysinger's avatar Mike Frysinger Committed by Max Kellermann

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: 's avatarMike Frysinger <vapier@gentoo.org>
parent c3e02bec
......@@ -100,7 +100,7 @@ dnl
dnl libc features
dnl
AC_CHECK_FUNCS(syslog)
AC_CHECK_FUNCS(daemon fork syslog)
if test $ac_cv_func_syslog = no; then
# syslog is not in the default libraries. See if it's in some other.
for lib in bsd socket inet; do
......
......@@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include "daemon.h"
#include <glib.h>
......@@ -128,21 +129,28 @@ daemonize_set_user(void)
static void
daemonize_detach(void)
{
pid_t pid;
/* flush all file handles before duplicating the buffers */
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 */
pid = fork();
if (pid < 0)
switch (fork()) {
case -1:
g_error("fork() failed: %s", g_strerror(errno));
if (pid > 0)
case 0:
break;
default:
/* exit the parent process */
_exit(EXIT_SUCCESS);
}
/* release the current working directory */
......@@ -153,6 +161,10 @@ daemonize_detach(void)
setsid();
#else
g_error("no support for daemonizing");
#endif
g_debug("daemonized!");
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment