summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen2001-09-05 20:18:15 +0000
committerEric Andersen2001-09-05 20:18:15 +0000
commit1644db9a2bc153373a2c27e7622a5486bf648114 (patch)
tree2ac9e45b8b09398acee6bcaa30a8f9c706a126ca
parentb9408504f5bc74a71435162e1c86ce7b60b9530b (diff)
downloadbusybox-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--Changelog3
-rw-r--r--init.c43
-rw-r--r--init/init.c43
3 files changed, 51 insertions, 38 deletions
diff --git a/Changelog b/Changelog
index 1585887..e0b9c46 100644
--- 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 f397b7e..17273af 100644
--- 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;
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;