diff options
author | Eric Andersen | 2001-09-05 20:18:15 +0000 |
---|---|---|
committer | Eric Andersen | 2001-09-05 20:18:15 +0000 |
commit | 1644db9a2bc153373a2c27e7622a5486bf648114 (patch) | |
tree | 2ac9e45b8b09398acee6bcaa30a8f9c706a126ca | |
parent | b9408504f5bc74a71435162e1c86ce7b60b9530b (diff) | |
download | busybox-1644db9a2bc153373a2c27e7622a5486bf648114.zip busybox-1644db9a2bc153373a2c27e7622a5486bf648114.tar.gz |
Two patches from Magick <magick@linux-fan.com>:
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.
-rw-r--r-- | Changelog | 3 | ||||
-rw-r--r-- | init.c | 43 | ||||
-rw-r--r-- | init/init.c | 43 |
3 files changed, 51 insertions, 38 deletions
@@ -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-- @@ -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; diff --git a/init/init.c b/init/init.c index f397b7e..17273af 100644 --- a/init/init.c +++ b/init/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; |