Use daemon() to spawn syslogd and klogd daemons.
authorEric Andersen <andersen@codepoet.org>
Thu, 29 Mar 2001 21:58:33 +0000 (21:58 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 29 Mar 2001 21:58:33 +0000 (21:58 -0000)
 -Erik

klogd.c
sysklogd/klogd.c
sysklogd/syslogd.c
syslogd.c

diff --git a/klogd.c b/klogd.c
index d5e330bdf75855098f0db48ff53c3e7ab57ca885..95d4eea658d2d2c3fa5777103c674a7f061fdc54 100644 (file)
--- a/klogd.c
+++ b/klogd.c
@@ -124,18 +124,10 @@ static void doKlogd (void)
        }
 }
 
-static void daemon_init (char **argv, char *dz, void fn (void))
-{
-       setsid(); /* start a new session? */
-       strncpy(argv[0], dz, strlen(argv[0]));
-       fn();
-       exit(0);
-}
-
 extern int klogd_main(int argc, char **argv)
 {
        /* no options, no getopt */
-       int opt, pid;
+       int opt;
        int doFork = TRUE;
 
        /* do normal option parsing */
@@ -150,15 +142,10 @@ extern int klogd_main(int argc, char **argv)
        }
 
        if (doFork == TRUE) {
-               pid = fork();
-               if (pid < 0)
-                       exit(pid);
-               else if (pid == 0) {
-                       daemon_init (argv, "klogd", doKlogd);
-               }
-       } else {
-               doKlogd();
+               if (daemon(0, 1) < 0)
+                       perror_msg_and_die("daemon");
        }
+       doKlogd();
        
        return EXIT_SUCCESS;
 }
index d5e330bdf75855098f0db48ff53c3e7ab57ca885..95d4eea658d2d2c3fa5777103c674a7f061fdc54 100644 (file)
@@ -124,18 +124,10 @@ static void doKlogd (void)
        }
 }
 
-static void daemon_init (char **argv, char *dz, void fn (void))
-{
-       setsid(); /* start a new session? */
-       strncpy(argv[0], dz, strlen(argv[0]));
-       fn();
-       exit(0);
-}
-
 extern int klogd_main(int argc, char **argv)
 {
        /* no options, no getopt */
-       int opt, pid;
+       int opt;
        int doFork = TRUE;
 
        /* do normal option parsing */
@@ -150,15 +142,10 @@ extern int klogd_main(int argc, char **argv)
        }
 
        if (doFork == TRUE) {
-               pid = fork();
-               if (pid < 0)
-                       exit(pid);
-               else if (pid == 0) {
-                       daemon_init (argv, "klogd", doKlogd);
-               }
-       } else {
-               doKlogd();
+               if (daemon(0, 1) < 0)
+                       perror_msg_and_die("daemon");
        }
+       doKlogd();
        
        return EXIT_SUCCESS;
 }
index cc42c29426208bdadcd3e8f3cd2890016379cb7c..e83ce48ae46e9444cc4cbe8d386e69908425feb5 100644 (file)
@@ -562,18 +562,9 @@ static void doSyslogd (void)
        } /* for main loop */
 }
 
-static void daemon_init (char **argv, char *dz, void fn (void))
-{
-       setsid();
-       chdir ("/");
-       strncpy(argv[0], dz, strlen(argv[0]));
-       fn();
-       exit(0);
-}
-
 extern int syslogd_main(int argc, char **argv)
 {
-       int opt, pid;
+       int opt;
        int doFork = TRUE;
 
        char *p;
@@ -635,15 +626,10 @@ extern int syslogd_main(int argc, char **argv)
 #endif
 
        if (doFork == TRUE) {
-               pid = fork();
-               if (pid < 0)
-                       exit(pid);
-               else if (pid == 0) {
-                       daemon_init (argv, "syslogd", doSyslogd);
-               }
-       } else {
-               doSyslogd();
+               if (daemon(0, 1) < 0)
+                       perror_msg_and_die("daemon");
        }
+       doSyslogd();
 
        return EXIT_SUCCESS;
 }
index cc42c29426208bdadcd3e8f3cd2890016379cb7c..e83ce48ae46e9444cc4cbe8d386e69908425feb5 100644 (file)
--- a/syslogd.c
+++ b/syslogd.c
@@ -562,18 +562,9 @@ static void doSyslogd (void)
        } /* for main loop */
 }
 
-static void daemon_init (char **argv, char *dz, void fn (void))
-{
-       setsid();
-       chdir ("/");
-       strncpy(argv[0], dz, strlen(argv[0]));
-       fn();
-       exit(0);
-}
-
 extern int syslogd_main(int argc, char **argv)
 {
-       int opt, pid;
+       int opt;
        int doFork = TRUE;
 
        char *p;
@@ -635,15 +626,10 @@ extern int syslogd_main(int argc, char **argv)
 #endif
 
        if (doFork == TRUE) {
-               pid = fork();
-               if (pid < 0)
-                       exit(pid);
-               else if (pid == 0) {
-                       daemon_init (argv, "syslogd", doSyslogd);
-               }
-       } else {
-               doSyslogd();
+               if (daemon(0, 1) < 0)
+                       perror_msg_and_die("daemon");
        }
+       doSyslogd();
 
        return EXIT_SUCCESS;
 }