Two patches from Magick <magick@linux-fan.com>:
authorEric Andersen <andersen@codepoet.org>
Wed, 5 Sep 2001 20:18:15 +0000 (20:18 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 5 Sep 2001 20:18:15 +0000 (20:18 -0000)
    1st makes init smaller, and fixes a bug with AskFirst. Reading from
    /dev/null gives EOF.
    2nd makes init run the command's in the order of inittab, as in
    FIFO instead of LIFO.

Changelog
init.c
init/init.c

index 1585887f5b01dfb01ea60a654e638b30fabf7e80..e0b9c4622aec5fe94f5e649ba330d714d2928b0c 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -19,6 +19,9 @@
            -- Fix sed s/[/]// handling (closes: #1208).
            -- Fix `-/bin/sh' invocation (closes: #1209).
            -- Fix ash exec (noted by Arne Bernin).
+       * Magick
+           -- maked init run inittab command's in inittab order (
+               (i.e. FIFO instead of LIFO).
 
 
         -Erik Andersen, --not yet released--
diff --git a/init.c b/init.c
index f397b7e0acf84de6cd721be2b9ede87daa421147..17273afcd309e9cc7f8fbe46e10847263b9e593c 100644 (file)
--- a/init.c
+++ b/init.c
@@ -203,9 +203,7 @@ static void message(int device, char *fmt, ...)
                va_start(arguments, fmt);
                vsnprintf(msg, sizeof(msg), fmt, arguments);
                va_end(arguments);
-               openlog(applet_name, 0, LOG_USER);
-               syslog(LOG_USER|LOG_INFO, msg);
-               closelog();
+               syslog_msg(LOG_USER, LOG_USER|LOG_INFO, msg);
        }
 #else
        static int log_fd = -1;
@@ -703,6 +701,9 @@ static void ctrlaltdel_signal(int sig)
 static void new_initAction(initActionEnum action, char *process, char *cons)
 {
        initAction *newAction;
+#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+       initAction *a;
+#endif
 
        if (*cons == '\0')
                cons = console;
@@ -714,14 +715,25 @@ static void new_initAction(initActionEnum action, char *process, char *cons)
        if (secondConsole == NULL && strcmp(cons, console)
                && strcmp(cons, "/dev/null"))
                return;
+       if (strcmp(cons, "/dev/null") == 0 && action == ASKFIRST)
+               return;
 
        newAction = calloc((size_t) (1), sizeof(initAction));
        if (!newAction) {
                message(LOG | CONSOLE, "Memory allocation failure\n");
                loop_forever();
        }
+#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+       for (a = initActionList; a && a->nextPtr; a = a->nextPtr) ;
+       if (a) {
+               a->nextPtr = newAction;
+       } else {
+               initActionList = newAction;
+       }
+#else
        newAction->nextPtr = initActionList;
        initActionList = newAction;
+#endif
        strncpy(newAction->process, process, 255);
        newAction->action = action;
        strncpy(newAction->console, cons, 255);
@@ -770,10 +782,17 @@ static void parse_inittab(void)
 #endif
                /* Reboot on Ctrl-Alt-Del */
                new_initAction(CTRLALTDEL, "/sbin/reboot", console);
+#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+               /* Umount all filesystems on halt/reboot */
+               new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
+               /* Swapoff on halt/reboot */
+               new_initAction(SHUTDOWN, "/sbin/swapoff -a", console);
+#else
                /* Swapoff on halt/reboot */
                new_initAction(SHUTDOWN, "/sbin/swapoff -a", console);
                /* Umount all filesystems on halt/reboot */
                new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
+#endif
                /* Askfirst shell on tty1 */
                new_initAction(ASKFIRST, LOGIN_SHELL, console);
                /* Askfirst shell on tty2 */
@@ -960,23 +979,9 @@ extern int init_main(int argc, char **argv)
        /* Now run everything that needs to be run */
 
        /* First run the sysinit command */
-       for (a = initActionList; a; a = tmp) {
-               tmp = a->nextPtr;
-               if (a->action == SYSINIT) {
-                       waitfor(a->process, a->console, FALSE);
-                       /* Now remove the "sysinit" entry from the list */
-                       delete_initAction(a);
-               }
-       }
+       run_actions(SYSINIT);
        /* Next run anything that wants to block */
-       for (a = initActionList; a; a = tmp) {
-               tmp = a->nextPtr;
-               if (a->action == WAIT) {
-                       waitfor(a->process, a->console, FALSE);
-                       /* Now remove the "wait" entry from the list */
-                       delete_initAction(a);
-               }
-       }
+       run_actions(WAIT);
        /* Next run anything to be run only once */
        for (a = initActionList; a; a = tmp) {
                tmp = a->nextPtr;
index f397b7e0acf84de6cd721be2b9ede87daa421147..17273afcd309e9cc7f8fbe46e10847263b9e593c 100644 (file)
@@ -203,9 +203,7 @@ static void message(int device, char *fmt, ...)
                va_start(arguments, fmt);
                vsnprintf(msg, sizeof(msg), fmt, arguments);
                va_end(arguments);
-               openlog(applet_name, 0, LOG_USER);
-               syslog(LOG_USER|LOG_INFO, msg);
-               closelog();
+               syslog_msg(LOG_USER, LOG_USER|LOG_INFO, msg);
        }
 #else
        static int log_fd = -1;
@@ -703,6 +701,9 @@ static void ctrlaltdel_signal(int sig)
 static void new_initAction(initActionEnum action, char *process, char *cons)
 {
        initAction *newAction;
+#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+       initAction *a;
+#endif
 
        if (*cons == '\0')
                cons = console;
@@ -714,14 +715,25 @@ static void new_initAction(initActionEnum action, char *process, char *cons)
        if (secondConsole == NULL && strcmp(cons, console)
                && strcmp(cons, "/dev/null"))
                return;
+       if (strcmp(cons, "/dev/null") == 0 && action == ASKFIRST)
+               return;
 
        newAction = calloc((size_t) (1), sizeof(initAction));
        if (!newAction) {
                message(LOG | CONSOLE, "Memory allocation failure\n");
                loop_forever();
        }
+#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+       for (a = initActionList; a && a->nextPtr; a = a->nextPtr) ;
+       if (a) {
+               a->nextPtr = newAction;
+       } else {
+               initActionList = newAction;
+       }
+#else
        newAction->nextPtr = initActionList;
        initActionList = newAction;
+#endif
        strncpy(newAction->process, process, 255);
        newAction->action = action;
        strncpy(newAction->console, cons, 255);
@@ -770,10 +782,17 @@ static void parse_inittab(void)
 #endif
                /* Reboot on Ctrl-Alt-Del */
                new_initAction(CTRLALTDEL, "/sbin/reboot", console);
+#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+               /* Umount all filesystems on halt/reboot */
+               new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
+               /* Swapoff on halt/reboot */
+               new_initAction(SHUTDOWN, "/sbin/swapoff -a", console);
+#else
                /* Swapoff on halt/reboot */
                new_initAction(SHUTDOWN, "/sbin/swapoff -a", console);
                /* Umount all filesystems on halt/reboot */
                new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
+#endif
                /* Askfirst shell on tty1 */
                new_initAction(ASKFIRST, LOGIN_SHELL, console);
                /* Askfirst shell on tty2 */
@@ -960,23 +979,9 @@ extern int init_main(int argc, char **argv)
        /* Now run everything that needs to be run */
 
        /* First run the sysinit command */
-       for (a = initActionList; a; a = tmp) {
-               tmp = a->nextPtr;
-               if (a->action == SYSINIT) {
-                       waitfor(a->process, a->console, FALSE);
-                       /* Now remove the "sysinit" entry from the list */
-                       delete_initAction(a);
-               }
-       }
+       run_actions(SYSINIT);
        /* Next run anything that wants to block */
-       for (a = initActionList; a; a = tmp) {
-               tmp = a->nextPtr;
-               if (a->action == WAIT) {
-                       waitfor(a->process, a->console, FALSE);
-                       /* Now remove the "wait" entry from the list */
-                       delete_initAction(a);
-               }
-       }
+       run_actions(WAIT);
        /* Next run anything to be run only once */
        for (a = initActionList; a; a = tmp) {
                tmp = a->nextPtr;