hush: move msh/lash config into hush.c, no code changes
[oweals/busybox.git] / runit / runsvdir.c
index 9d560e0974caaecc45ec19b868c29dd0ac3e77e6..71fde757e0b0f61c7a783e78cea4f2924bd093f0 100644 (file)
@@ -58,7 +58,7 @@ struct globals {
        struct pollfd pfd[1];
        unsigned stamplog;
 #endif
-};
+} FIX_ALIASING;
 #define G (*(struct globals*)&bb_common_bufsiz1)
 #define sv          (G.sv          )
 #define svdir       (G.svdir       )
@@ -73,7 +73,7 @@ struct globals {
 
 static void fatal2_cannot(const char *m1, const char *m2)
 {
-       bb_perror_msg_and_die("%s: fatal: cannot %s%s", svdir, m1, m2);
+       bb_perror_msg_and_die("%s: fatal: can't %s%s", svdir, m1, m2);
        /* was exiting 100 */
 }
 static void warn3x(const char *m1, const char *m2, const char *m3)
@@ -82,7 +82,7 @@ static void warn3x(const char *m1, const char *m2, const char *m3)
 }
 static void warn2_cannot(const char *m1, const char *m2)
 {
-       warn3x("cannot ", m1, m2);
+       warn3x("can't ", m1, m2);
 }
 #if ENABLE_FEATURE_RUNSVDIR_LOG
 static void warnx(const char *m1)
@@ -119,7 +119,7 @@ static NOINLINE pid_t runsv(const char *name)
                        | (1 << SIGTERM)
                        , SIG_DFL);
 #endif
-               execlp("runsv", "runsv", name, NULL);
+               execlp("runsv", "runsv", name, (char *) NULL);
                fatal2_cannot("start runsv ", name);
        }
        return pid;
@@ -129,7 +129,7 @@ static NOINLINE pid_t runsv(const char *name)
 static NOINLINE int do_rescan(void)
 {
        DIR *dir;
-       direntry *d;
+       struct dirent *d;
        int i;
        struct stat s;
        int need_rescan = 0;
@@ -256,14 +256,14 @@ int runsvdir_main(int argc UNUSED_PARAM, char **argv)
                if (rploglen < 7) {
                        warnx("log must have at least seven characters");
                } else if (piped_pair(logpipe)) {
-                       warnx("cannot create pipe for log");
+                       warnx("can't create pipe for log");
                } else {
                        close_on_exec_on(logpipe.rd);
                        close_on_exec_on(logpipe.wr);
                        ndelay_on(logpipe.rd);
                        ndelay_on(logpipe.wr);
                        if (dup2(logpipe.wr, 2) == -1) {
-                               warnx("cannot set filedescriptor for log");
+                               warnx("can't set filedescriptor for log");
                        } else {
                                pfd[0].fd = logpipe.rd;
                                pfd[0].events = POLLIN;
@@ -370,26 +370,24 @@ int runsvdir_main(int argc UNUSED_PARAM, char **argv)
                        opt_s_argv[1] = utoa(bb_got_signal);
                        pid = spawn(opt_s_argv);
                        if (pid > 0) {
-                               /* Remebering to wait for _any_ children,
+                               /* Remembering to wait for _any_ children,
                                 * not just pid */
                                while (wait(NULL) != pid)
                                        continue;
                        }
                }
 
-               switch (bb_got_signal) {
-               case SIGHUP:
+               if (bb_got_signal == SIGHUP) {
                        for (i = 0; i < svnum; i++)
                                if (sv[i].pid)
                                        kill(sv[i].pid, SIGTERM);
-                       /* Fall through */
-               default: /* SIGTERM (or SIGUSRn if we are init) */
-                       /* Exit unless we are init */
-                       if (getpid() == 1)
-                               break;
-                       return (SIGHUP == bb_got_signal) ? 111 : EXIT_SUCCESS;
                }
+               /* SIGHUP or SIGTERM (or SIGUSRn if we are init) */
+               /* Exit unless we are init */
+               if (getpid() != 1)
+                       return (SIGHUP == bb_got_signal) ? 111 : EXIT_SUCCESS;
 
+               /* init continues to monitor services forever */
                bb_got_signal = 0;
        } /* for (;;) */
 }