OSDN Git Service

- patch from Denis Vlasenko to add and use bb_xdaemon()
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 12 Apr 2006 18:09:26 +0000 (18:09 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 12 Apr 2006 18:09:26 +0000 (18:09 -0000)
12 files changed:
debianutils/start_stop_daemon.c
include/libbb.h
libbb/Makefile.in
libbb/bb_xdaemon.c [new file with mode: 0644]
miscutils/crond.c
miscutils/watchdog.c
networking/dnsd.c
networking/httpd.c
networking/inetd.c
networking/telnetd.c
sysklogd/klogd.c
sysklogd/syslogd.c

index 5b68974..b44a23b 100644 (file)
@@ -275,8 +275,7 @@ start_stop_daemon_main(int argc, char **argv)
        }
        *--argv = startas;
        if (opt & SSD_OPT_BACKGROUND) {
-               if (daemon(0, 0) == -1)
-                       bb_perror_msg_and_die ("unable to fork");
+               bb_xdaemon(0, 0);
                setsid();
        }
        if (opt & SSD_OPT_MAKEPID) {
index c031f28..650002b 100644 (file)
@@ -146,6 +146,7 @@ extern void  bb_fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN;
 
 extern void xstat(const char *filename, struct stat *buf);
 extern int  bb_xsocket(int domain, int type, int protocol);
+extern void bb_xdaemon(int nochdir, int noclose);
 
 #define BB_GETOPT_ERROR 0x80000000UL
 extern const char *bb_opt_complementally;
index c699783..3fb945e 100644 (file)
@@ -30,7 +30,7 @@ LIBBB-y:= \
        trim.c u_signal_names.c vdprintf.c verror_msg.c \
        vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xstat.c \
        xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
-       bb_xsocket.c \
+       bb_xsocket.c bb_xdaemon.c \
        get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
        getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
        perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \
diff --git a/libbb/bb_xdaemon.c b/libbb/bb_xdaemon.c
new file mode 100644 (file)
index 0000000..a40f4f9
--- /dev/null
@@ -0,0 +1,17 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * bb_xdaemon.c - a daemon() which dies on failure with error message
+ *
+ * Copyright (C) 2006 Denis Vlasenko
+ *
+ * Licensed under LGPL, see file docs/lesser.txt in this tarball for details.
+ */
+#include <unistd.h>
+#include "libbb.h"
+
+void bb_xdaemon(int nochdir, int noclose)
+{
+       if (daemon(nochdir, noclose))
+               bb_perror_msg_and_die("daemon");
+}
+
index 7e50b61..06b8769 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 /*
  * crond -d[#] -c <crondir> -f -b
  *
@@ -213,9 +214,7 @@ int crond_main(int ac, char **av)
                /* reexec for vfork() do continue parent */
                vfork_daemon_rexec(1, 0, ac, av, "-f");
 #else                                                  /* uClinux */
-               if (daemon(1, 0) < 0) {
-                       bb_perror_msg_and_die("daemon");
-               }
+               bb_xdaemon(1, 0);
 #endif                                                 /* uClinux */
        }
 
index 55dd698..58a6065 100644 (file)
@@ -40,8 +40,7 @@ int watchdog_main(int argc, char **argv)
        if (optind < argc - 1 || argc == 1)
                bb_show_usage();
 
-       if (daemon(0, 1) < 0)
-               bb_perror_msg_and_die("Failed forking watchdog daemon");
+       bb_xdaemon(0, 1);
 
        signal(SIGHUP, watchdog_shutdown);
        signal(SIGINT, watchdog_shutdown);
index 9c51938..d78ea04 100644 (file)
@@ -5,6 +5,7 @@
  * Copyright (C) 2005 Roberto A. Foglietta (me@roberto.foglietta.name)
  * Copyright (C) 2005 Odd Arild Olsen (oao at fibula dot no)
  * Copyright (C) 2003 Paul Sheer
+ *
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  *
  * Odd Arild Olsen started out with the sheerdns [1] of Paul Sheer and rewrote
@@ -408,9 +409,7 @@ int dnsd_main(int argc, char **argv)
                /* reexec for vfork() do continue parent */
                vfork_daemon_rexec(1, 0, argc, argv, "-d");
 #else                                                  /* uClinux */
-               if (daemon(1, 0) < 0) {
-                       bb_perror_msg_and_die("daemon");
-               }
+               bb_xdaemon(1, 0);
 #endif                                                 /* uClinuvx */
 
        dnsentryinit(is_verbose());
index fde8ae4..354c199 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 /*
  * httpd implementation for busybox
  *
@@ -2114,8 +2115,7 @@ int httpd_main(int argc, char *argv[])
 
 #if !ENABLE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
 # if !DEBUG
-  if (daemon(1, 0) < 0)     /* don`t change curent directory */
-       bb_perror_msg_and_die("daemon");
+  bb_xdaemon(1, 0);     /* don`t change curent directory */
 # endif
   return miniHttpd(server);
 #else
index cc70083..39a2b24 100644 (file)
@@ -1314,7 +1314,7 @@ inetd_main (int argc, char *argv[])
        /* reexec for vfork() do continue parent */
        vfork_daemon_rexec (0, 0, argc, argv, "-f");
 #else
-       daemon (0, 0);
+       daemon (0, 0); /* bb_xdaemon? */
 #endif /* uClinux */
   } else {
        setsid ();
@@ -1802,3 +1802,4 @@ daytime_dg (int s, servtab_t *sep ATTRIBUTE_UNUSED)
   (void) sendto (s, buffer, strlen (buffer), 0, &sa, sizeof (sa));
 }
 #endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME */
+/* vi: set sw=4 ts=4: */
index 3e4b42c..d53f56b 100644 (file)
@@ -1,4 +1,4 @@
-/* vi:set ts=4:*/
+/* vi: set sw=4 ts=4: */
 /*
  * Simple telnet server
  * Bjorn Wesen, Axis Communications AB (bjornw@axis.com)
@@ -469,9 +469,7 @@ telnetd_main(int argc, char **argv)
                bb_perror_msg_and_die("listen");
        }
 
-       if (daemon(0, 0) < 0)
-               bb_perror_msg_and_die("daemon");
-
+       bb_xdaemon(0, 0);
 
        maxfd = master_fd;
 #endif /* CONFIG_FEATURE_TELNETD_INETD */
index 51b0143..6dc5457 100644 (file)
@@ -121,8 +121,7 @@ int klogd_main(int argc, char **argv)
 #if defined(__uClinux__)
                vfork_daemon_rexec(0, 1, argc, argv, "-n");
 #else /* __uClinux__ */
-               if (daemon(0, 1) < 0)
-                       bb_perror_msg_and_die("daemon");
+               bb_xdaemon(0, 1);
 #endif /* __uClinux__ */
        }
        doKlogd(console_log_level);
index b43c72d..0fcbb48 100644 (file)
@@ -673,8 +673,7 @@ int syslogd_main(int argc, char **argv)
 #if defined(__uClinux__)
                vfork_daemon_rexec(0, 1, argc, argv, "-n");
 #else /* __uClinux__ */
-               if(daemon(0, 1) < 0)
-                       bb_perror_msg_and_die("daemon");
+               bb_xdaemon(0, 1);
 #endif /* __uClinux__ */
        }
        doSyslogd();