| @@ -19,7 +19,7 @@ |
| |
| #include "init_shared.h" |
| |
| - | #ifdef CONFIG_SYSLOGD |
| + | #if ENABLE_SYSLOGD |
| # include <sys/syslog.h> |
| #endif |
| |
| @@ -60,7 +60,7 @@ struct serial_struct { |
| #define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" |
| #endif |
| |
| - | #if defined CONFIG_FEATURE_INIT_COREDUMPS |
| + | #if ENABLE_FEATURE_INIT_COREDUMPS |
| /* |
| * When a file named CORE_ENABLE_FLAG_FILE exists, setrlimit is called |
| * before processes are spawned to set core file size as unlimited. |
| @@ -121,7 +121,7 @@ struct init_action { |
| static struct init_action *init_action_list = NULL; |
| static char console[CONSOLE_BUFF_SIZE] = CONSOLE_DEV; |
| |
| - | #ifndef CONFIG_SYSLOGD |
| + | #if !ENABLE_SYSLOGD |
| static char *log_console = VC_5; |
| #endif |
| #if !ENABLE_DEBUG_INIT |
| @@ -132,7 +132,7 @@ enum { |
| LOG = 0x1, |
| CONSOLE = 0x2, |
| |
| - | #if defined CONFIG_FEATURE_EXTRA_QUIET |
| + | #if ENABLE_FEATURE_EXTRA_QUIET |
| MAYBE_CONSOLE = 0x0, |
| #else |
| MAYBE_CONSOLE = CONSOLE, |
| @@ -162,11 +162,13 @@ static int waitfor(const struct init_action *a, pid_t pid); |
| static void shutdown_signal(int sig); |
| #endif |
| |
| + | #if !ENABLE_DEBUG_INIT |
| static void loop_forever(void) |
| { |
| while (1) |
| sleep(1); |
| } |
| + | #endif |
| |
| /* Print a message to the specified device. |
| * Device may be bitwise-or'd from LOG | CONSOLE */ |
| @@ -182,7 +184,7 @@ static void message(int device, const char *fmt, ...) |
| va_list arguments; |
| int l; |
| RESERVE_CONFIG_BUFFER(msg, 1024); |
| - | #ifndef CONFIG_SYSLOGD |
| + | #if !ENABLE_SYSLOGD |
| static int log_fd = -1; |
| #endif |
| |
| @@ -191,7 +193,7 @@ static void message(int device, const char *fmt, ...) |
| l = vsnprintf(msg + 1, 1024 - 2, fmt, arguments) + 1; |
| va_end(arguments); |
| |
| - | #ifdef CONFIG_SYSLOGD |
| + | #if ENABLE_SYSLOGD |
| /* Log the message to syslogd */ |
| if (device & LOG) { |
| /* don`t out "\r\n" */ |
| @@ -313,7 +315,7 @@ static void console_init(void) |
| } |
| if (fd < 0) { |
| /* Perhaps we should panic here? */ |
| - | #ifndef CONFIG_SYSLOGD |
| + | #if !ENABLE_SYSLOGD |
| log_console = |
| #endif |
| safe_strncpy(console, bb_dev_null, sizeof(console)); |
| @@ -325,7 +327,7 @@ static void console_init(void) |
| * if TERM is set to linux (the default) */ |
| if (s == NULL || strcmp(s, "linux") == 0) |
| putenv("TERM=vt102"); |
| - | #ifndef CONFIG_SYSLOGD |
| + | #if !ENABLE_SYSLOGD |
| log_console = console; |
| #endif |
| } else { |
| @@ -510,7 +512,7 @@ static pid_t run(const struct init_action *a) |
| cmd[0][0] = '-'; |
| strcpy(cmd[0] + 1, s); |
| } |
| - | #ifdef CONFIG_FEATURE_INIT_SCTTY |
| + | #if ENABLE_FEATURE_INIT_SCTTY |
| /* Establish this process as session leader and |
| * (attempt) to make the tty (if any) a controlling tty. |
| */ |
| @@ -543,7 +545,7 @@ static pid_t run(const struct init_action *a) |
| message(LOG, "Starting pid %d, console %s: '%s'", |
| getpid(), a->terminal, cmdpath); |
| |
| - | #if defined CONFIG_FEATURE_INIT_COREDUMPS |
| + | #if ENABLE_FEATURE_INIT_COREDUMPS |
| { |
| struct stat sb; |
| if (stat(CORE_ENABLE_FLAG_FILE, &sb) == 0) { |
| @@ -622,11 +624,12 @@ static void init_reboot(unsigned long magic) |
| /* We have to fork here, since the kernel calls do_exit(0) in |
| * linux/kernel/sys.c, which can cause the machine to panic when |
| * the init process is killed.... */ |
| - | if ((pid = fork()) == 0) { |
| + | pid = vfork(); |
| + | if (pid == 0) { /* child */ |
| reboot(magic); |
| _exit(0); |
| } |
| - | waitpid (pid, NULL, 0); |
| + | waitpid(pid, NULL, 0); |
| } |
| |
| static void shutdown_system(void) |
| @@ -746,7 +749,6 @@ static void shutdown_signal(int sig) |
| sleep(2); |
| |
| init_reboot(rb); |
| - | |
| loop_forever(); |
| } |
| |
| @@ -785,11 +787,7 @@ static void new_init_action(int action, const char *command, const char *cons) |
| if (strcmp(cons, bb_dev_null) == 0 && (action & ASKFIRST)) |
| return; |
| |
| - | new_action = calloc((size_t) (1), sizeof(struct init_action)); |
| - | if (!new_action) { |
| - | message(LOG | CONSOLE, "Memory allocation failure"); |
| - | loop_forever(); |
| - | } |
| + | new_action = xzalloc(sizeof(struct init_action)); |
| |
| /* Append to the end of the list */ |
| for (a = last = init_action_list; a; a = a->next) { |
| @@ -841,7 +839,7 @@ static void delete_init_action(struct init_action *action) |
| */ |
| static void parse_inittab(void) |
| { |
| - | #ifdef CONFIG_FEATURE_USE_INITTAB |
| + | #if ENABLE_FEATURE_USE_INITTAB |
| FILE *file; |
| char buf[INIT_BUFFS_SIZE], lineAsRead[INIT_BUFFS_SIZE]; |
| char tmpConsole[CONSOLE_BUFF_SIZE]; |
| @@ -870,7 +868,7 @@ static void parse_inittab(void) |
| new_init_action(SYSINIT, INIT_SCRIPT, ""); |
| |
| return; |
| - | #ifdef CONFIG_FEATURE_USE_INITTAB |
| + | #if ENABLE_FEATURE_USE_INITTAB |
| } |
| |
| while (fgets(buf, INIT_BUFFS_SIZE, file) != NULL) { |
| @@ -941,10 +939,10 @@ static void parse_inittab(void) |
| } |
| fclose(file); |
| return; |
| - | #endif /* CONFIG_FEATURE_USE_INITTAB */ |
| + | #endif /* FEATURE_USE_INITTAB */ |
| } |
| |
| - | #ifdef CONFIG_FEATURE_USE_INITTAB |
| + | #if ENABLE_FEATURE_USE_INITTAB |
| static void reload_signal(int sig ATTRIBUTE_UNUSED) |
| { |
| struct init_action *a, *tmp; |
| @@ -969,13 +967,15 @@ static void reload_signal(int sig ATTRIBUTE_UNUSED) |
| run_actions(RESPAWN); |
| return; |
| } |
| - | #endif /* CONFIG_FEATURE_USE_INITTAB */ |
| + | #endif /* FEATURE_USE_INITTAB */ |
| |
| int init_main(int argc, char **argv) |
| { |
| struct init_action *a; |
| pid_t wpid; |
| |
| + | die_sleep = 30 * 24*60*60; /* if xmalloc will ever die... */ |
| + | |
| if (argc > 1 && !strcmp(argv[1], "-q")) { |
| return kill(1,SIGHUP); |
| } |
| @@ -1062,7 +1062,7 @@ int init_main(int argc, char **argv) |
| parse_inittab(); |
| } |
| |
| - | #ifdef CONFIG_SELINUX |
| + | #if ENABLE_SELINUX |
| if (getenv("SELINUX_INIT") == NULL) { |
| int enforce = 0; |
| |
| @@ -1092,12 +1092,12 @@ int init_main(int argc, char **argv) |
| /* Next run anything to be run only once */ |
| run_actions(ONCE); |
| |
| - | #ifdef CONFIG_FEATURE_USE_INITTAB |
| + | #if ENABLE_FEATURE_USE_INITTAB |
| /* Redefine SIGHUP to reread /etc/inittab */ |
| signal(SIGHUP, reload_signal); |
| #else |
| signal(SIGHUP, SIG_IGN); |
| - | #endif /* CONFIG_FEATURE_USE_INITTAB */ |
| + | #endif /* FEATURE_USE_INITTAB */ |
| |
| |
| /* Now run the looping stuff for the rest of forever */ |