diff options
author | Denis Vlasenko | 2007-01-03 02:56:00 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-01-03 02:56:00 +0000 |
commit | 9b1381fd2fb7179f731709542507015799f90a51 (patch) | |
tree | 66b3617e0b6ceed9c3123000104df0d78bf9bf2a /init | |
parent | bb3d0fab3b46d64e93687bc30b405d0878eca296 (diff) | |
download | busybox-9b1381fd2fb7179f731709542507015799f90a51.zip busybox-9b1381fd2fb7179f731709542507015799f90a51.tar.gz |
convert calloc to xzalloc
fix sleep-on-die option
Diffstat (limited to 'init')
-rw-r--r-- | init/init.c | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/init/init.c b/init/init.c index 2e8ca3c..6fc68af 100644 --- a/init/init.c +++ b/init/init.c @@ -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 */ |