diff options
-rw-r--r-- | init/Kbuild | 2 | ||||
-rw-r--r-- | init/init.c | 348 | ||||
-rw-r--r-- | init/init_shared.c | 63 | ||||
-rw-r--r-- | init/init_shared.h | 10 |
4 files changed, 131 insertions, 292 deletions
diff --git a/init/Kbuild b/init/Kbuild index e993602..c060f3a 100644 --- a/init/Kbuild +++ b/init/Kbuild @@ -8,5 +8,3 @@ lib-y:= lib-$(CONFIG_HALT) += halt.o lib-$(CONFIG_INIT) += init.o lib-$(CONFIG_MESG) += mesg.o -lib-$(CONFIG_INIT) += init_shared.o -lib-$(CONFIG_HALT) += init_shared.o diff --git a/init/init.c b/init/init.c index b488f64..ec18332 100644 --- a/init/init.c +++ b/init/init.c @@ -16,44 +16,13 @@ #include <sys/wait.h> #include <sys/reboot.h> -#include "init_shared.h" - #if ENABLE_SYSLOGD # include <sys/syslog.h> #endif #define INIT_BUFFS_SIZE 256 - -/* From <linux/vt.h> */ -struct vt_stat { - unsigned short v_active; /* active vt */ - unsigned short v_signal; /* signal to send */ - unsigned short v_state; /* vt bitmask */ -}; -enum { VT_GETSTATE = 0x5603 }; /* get global vt state info */ - -/* From <linux/serial.h> */ -struct serial_struct { - int type; - int line; - unsigned int port; - int irq; - int flags; - int xmit_fifo_size; - int custom_divisor; - int baud_base; - unsigned short close_delay; - char io_type; - char reserved_char[1]; - int hub6; - unsigned short closing_wait; /* time to wait before closing */ - unsigned short closing_wait2; /* no longer used... */ - unsigned char *iomem_base; - unsigned short iomem_reg_shift; - unsigned int port_high; - unsigned long iomap_base; /* cookie passed into ioremap */ - int reserved[1]; -}; +#define CONSOLE_NAME_SIZE 32 +#define MAXENV 16 /* Number of env. vars */ #ifndef _PATH_STDPATH #define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" @@ -75,10 +44,6 @@ struct serial_struct { #define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */ #endif -#define MAXENV 16 /* Number of env. vars */ - -#define CONSOLE_BUFF_SIZE 32 - /* Allowed init action types */ #define SYSINIT 0x001 #define RESPAWN 0x002 @@ -109,16 +74,15 @@ static const struct init_action_type actions[] = { /* Set up a linked list of init_actions, to be read from inittab */ struct init_action { - pid_t pid; - char command[INIT_BUFFS_SIZE]; - char terminal[CONSOLE_BUFF_SIZE]; struct init_action *next; int action; + pid_t pid; + char command[INIT_BUFFS_SIZE]; + char terminal[CONSOLE_NAME_SIZE]; }; /* Static variables */ static struct init_action *init_action_list = NULL; -static char console_name[CONSOLE_BUFF_SIZE] = DEV_CONSOLE; #if !ENABLE_SYSLOGD static const char *log_console = VC_5; @@ -180,68 +144,60 @@ static void message(int device, const char *fmt, ...) __attribute__ ((format(printf, 2, 3))); static void message(int device, const char *fmt, ...) { - va_list arguments; - int l; - RESERVE_CONFIG_BUFFER(msg, 1024); #if !ENABLE_SYSLOGD static int log_fd = -1; #endif + va_list arguments; + int l; + char msg[128]; + msg[0] = '\r'; - va_start(arguments, fmt); - l = vsnprintf(msg + 1, 1024 - 2, fmt, arguments) + 1; + va_start(arguments, fmt); + vsnprintf(msg + 1, sizeof(msg) - 2, fmt, arguments); va_end(arguments); + msg[sizeof(msg) - 2] = '\0'; + l = strlen(msg); #if ENABLE_SYSLOGD /* Log the message to syslogd */ if (device & L_LOG) { - /* don`t out "\r\n" */ + /* don't out "\r" */ openlog(applet_name, 0, LOG_DAEMON); - syslog(LOG_INFO, "%s", msg + 1); + syslog(LOG_INFO, "init: %s", msg + 1); closelog(); } - msg[l++] = '\n'; - msg[l] = 0; + msg[l] = '\0'; #else - msg[l++] = '\n'; - msg[l] = 0; + msg[l] = '\0'; /* Take full control of the log tty, and never close it. * It's mine, all mine! Muhahahaha! */ if (log_fd < 0) { - log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY); - if (log_fd < 0) { - log_fd = -2; - bb_error_msg("bummer, can't log to %s!", log_console); - device = L_CONSOLE; + if (!log_console) { + log_fd = 2; } else { - fcntl(log_fd, F_SETFD, FD_CLOEXEC); + log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY); + if (log_fd < 0) { + bb_error_msg("can't log to %s", log_console); + device = L_CONSOLE; + } else { + fcntl(log_fd, F_SETFD, FD_CLOEXEC); + } } } if (device & L_LOG) { full_write(log_fd, msg, l); + if (log_fd == 2) + return; /* don't print dup messages */ } #endif if (device & L_CONSOLE) { - int fd = device_open(DEV_CONSOLE, - O_WRONLY | O_NOCTTY | O_NONBLOCK); - /* Always send console messages to /dev/console so people will see them. */ - if (fd >= 0) { - full_write(fd, msg, l); - close(fd); -#if ENABLE_DEBUG_INIT - /* all descriptors may be closed */ - } else { - bb_error_msg("bummer, can't print: "); - va_start(arguments, fmt); - vfprintf(stderr, fmt, arguments); - va_end(arguments); -#endif - } + /* Send console messages to console so people will see them. */ + full_write(2, msg, l); } - RELEASE_CONFIG_BUFFER(msg); } /* Set terminal settings to reasonable defaults */ @@ -268,7 +224,6 @@ static void set_term(void) tty.c_cflag &= CBAUD | CBAUDEX | CSIZE | CSTOPB | PARENB | PARODD; tty.c_cflag |= CREAD | HUPCL | CLOCAL; - /* input modes */ tty.c_iflag = ICRNL | IXON | IXOFF; @@ -282,60 +237,59 @@ static void set_term(void) tcsetattr(STDIN_FILENO, TCSANOW, &tty); } +/* From <linux/serial.h> */ +struct serial_struct { + int type; + int line; + unsigned int port; + int irq; + int flags; + int xmit_fifo_size; + int custom_divisor; + int baud_base; + unsigned short close_delay; + char io_type; + char reserved_char[1]; + int hub6; + unsigned short closing_wait; /* time to wait before closing */ + unsigned short closing_wait2; /* no longer used... */ + unsigned char *iomem_base; + unsigned short iomem_reg_shift; + unsigned int port_high; + unsigned long iomap_base; /* cookie passed into ioremap */ + int reserved[1]; + /* Paranoia (imagine 64bit kernel overwriting 32bit userspace stack) */ + uint32_t bbox_reserved[16]; +}; static void console_init(void) { - int fd; - int tried = 0; - struct vt_stat vt; struct serial_struct sr; char *s; - if ((s = getenv("CONSOLE")) != NULL || (s = getenv("console")) != NULL) { - safe_strncpy(console_name, s, sizeof(console_name)); - } else { - /* 2.2 kernels: identify the real console backend and try to use it */ - if (ioctl(0, TIOCGSERIAL, &sr) == 0) { - /* this is a serial console */ - snprintf(console_name, sizeof(console_name) - 1, SC_FORMAT, sr.line); - } else if (ioctl(0, VT_GETSTATE, &vt) == 0) { - /* this is linux virtual tty */ - snprintf(console_name, sizeof(console_name) - 1, VC_FORMAT, vt.v_active); - } else { - strcpy(console_name, DEV_CONSOLE); - tried++; + s = getenv("CONSOLE"); + if (!s) s = getenv("console"); + if (s) { + int fd = open(s, O_RDWR | O_NONBLOCK | O_NOCTTY); + if (fd >= 0) { + dup2(fd, 0); + dup2(fd, 1); + dup2(fd, 2); + while (fd > 2) close(fd--); } + messageD(L_LOG, "console='%s'", s); } - while ((fd = open(console_name, O_RDONLY | O_NONBLOCK)) < 0 && tried < 2) { - /* Can't open selected console -- try - logical system console and VT_MASTER */ - strcpy(console_name, (tried == 0 ? DEV_CONSOLE : CURRENT_VC)); - tried++; - } - if (fd < 0) { - /* Perhaps we should panic here? */ -#if !ENABLE_SYSLOGD - log_console = -#endif - strcpy(console_name, bb_dev_null); - } else { - s = getenv("TERM"); - /* check for serial console */ - if (ioctl(fd, TIOCGSERIAL, &sr) == 0) { - /* Force the TERM setting to vt102 for serial console -- - * if TERM is set to linux (the default) */ - if (s == NULL || strcmp(s, "linux") == 0) - putenv((char*)"TERM=vt102"); + s = getenv("TERM"); + if (ioctl(0, TIOCGSERIAL, &sr) == 0) { + /* Force the TERM setting to vt102 for serial console -- + * if TERM is set to linux (the default) */ + if (!s || strcmp(s, "linux") == 0) + putenv((char*)"TERM=vt102"); #if !ENABLE_SYSLOGD - log_console = console_name; + log_console = NULL; #endif - } else { - if (s == NULL) - putenv((char*)"TERM=linux"); - } - close(fd); - } - messageD(L_LOG, "console=%s", console_name); + } else if (!s) + putenv((char*)"TERM=linux"); } static void fixup_argv(int argc, char **argv, const char *new_argv0) @@ -355,24 +309,29 @@ static void fixup_argv(int argc, char **argv, const char *new_argv0) } /* Open the new terminal device */ -static void open_new_terminal(const char* device, int fail) { - struct stat sb; - - if ((device_open(device, O_RDWR)) < 0) { - if (stat(device, &sb) != 0) { - message(L_LOG | L_CONSOLE, "device '%s' does not exist", device); - } else { - message(L_LOG | L_CONSOLE, "Bummer, can't open %s", device); - } - if (fail) - _exit(1); - /* else */ +static void open_stdio_to_tty(const char* tty_name, int fail) +{ + /* empty tty_name means "use init's tty", else... */ + if (tty_name[0]) { + close(0); + if ((device_open(tty_name, O_RDWR)) < 0) { + dup2(1, 0); /* restore fd #0 - avoid nasty surprises */ + message(L_LOG | L_CONSOLE, "can't open %s: %s", + tty_name, strerror(errno)); + if (fail) + _exit(1); #if !ENABLE_DEBUG_INIT - shutdown_signal(SIGUSR1); + shutdown_signal(SIGUSR1); #else - _exit(2); + _exit(2); #endif + } } + close(1); + close(2); + set_term(); + dup(0); + dup(0); } static pid_t run(const struct init_action *a) @@ -395,11 +354,7 @@ static pid_t run(const struct init_action *a) sigprocmask(SIG_BLOCK, &nmask, &omask); if ((pid = fork()) == 0) { - /* Clean up */ - close(0); - close(1); - close(2); sigprocmask(SIG_SETMASK, &omask, NULL); /* Reset signal handlers that were set by the parent process */ @@ -418,14 +373,7 @@ static pid_t run(const struct init_action *a) setsid(); /* Open the new terminal device */ - open_new_terminal(a->terminal, 1); - - /* Make sure the terminal will act fairly normal for us */ - set_term(); - /* Setup stdout, stderr for the new process so - * they point to the supplied terminal */ - dup(0); - dup(0); + open_stdio_to_tty(a->terminal, 1); /* If the init Action requires us to wait, then force the * supplied terminal to be the controlling tty. */ @@ -433,7 +381,7 @@ static pid_t run(const struct init_action *a) /* Now fork off another process to just hang around */ if ((pid = fork()) < 0) { - message(L_LOG | L_CONSOLE, "Can't fork!"); + message(L_LOG | L_CONSOLE, "can't fork"); _exit(1); } @@ -452,7 +400,7 @@ static pid_t run(const struct init_action *a) /* Use a temporary process to steal the controlling tty. */ if ((pid = fork()) < 0) { - message(L_LOG | L_CONSOLE, "Can't fork!"); + message(L_LOG | L_CONSOLE, "can't fork"); _exit(1); } if (pid == 0) { @@ -489,14 +437,12 @@ static pid_t run(const struct init_action *a) cmdpath = cmd[0]; /* - Interactive shells want to see a dash in argv[0]. This - typically is handled by login, argv will be setup this - way if a dash appears at the front of the command path - (like "-/bin/sh"). + * Interactive shells want to see a dash in argv[0]. This + * typically is handled by login, argv will be setup this + * way if a dash appears at the front of the command path + * (like "-/bin/sh"). */ - if (*cmdpath == '-') { - /* skip over the dash */ ++cmdpath; @@ -515,8 +461,8 @@ static pid_t run(const struct init_action *a) /* Establish this process as session leader and * (attempt) to make the tty (if any) a controlling tty. */ - (void) setsid(); - (void) ioctl(0, TIOCSCTTY, 0/*don't steal it*/); + setsid(); + ioctl(0, TIOCSCTTY, 0 /*don't steal it*/); #endif } @@ -532,7 +478,7 @@ static pid_t run(const struct init_action *a) * specifies. */ messageD(L_LOG, "Waiting for enter to start '%s'" - "(pid %d, terminal %s)\n", + "(pid %d, tty '%s')\n", cmdpath, getpid(), a->terminal); full_write(1, press_enter, sizeof(press_enter) - 1); while (read(0, &c, 1) == 1 && c != '\n') @@ -541,7 +487,7 @@ static pid_t run(const struct init_action *a) #endif /* Log the process name and args */ - message(L_LOG, "Starting pid %d, console %s: '%s'", + message(L_LOG, "starting pid %d, tty '%s': '%s'", getpid(), a->terminal, cmdpath); #if ENABLE_FEATURE_INIT_COREDUMPS @@ -562,7 +508,8 @@ static pid_t run(const struct init_action *a) BB_EXECVP(cmdpath, cmd); /* We're still here? Some error happened. */ - message(L_LOG | L_CONSOLE, "Bummer, cannot run '%s': %m", cmdpath); + message(L_LOG | L_CONSOLE, "Cannot run '%s': %s", + cmdpath, strerror(errno)); _exit(-1); } sigprocmask(SIG_SETMASK, &omask, NULL); @@ -597,7 +544,8 @@ static void run_actions(int action) for (a = init_action_list; a; a = tmp) { tmp = a->next; if (a->action == action) { - if (access(a->terminal, R_OK | W_OK)) { + /* a->terminal of "" means "init's console" */ + if (a->terminal[0] && access(a->terminal, R_OK | W_OK)) { delete_init_action(a); } else if (a->action & (SYSINIT | WAIT | CTRLALTDEL | SHUTDOWN | RESTART)) { waitfor(a, 0); @@ -654,23 +602,21 @@ static void shutdown_system(void) sigaddset(&block_signals, SIGTSTP); sigprocmask(SIG_BLOCK, &block_signals, NULL); + message(L_CONSOLE | L_LOG, "The system is going down NOW!"); + /* Allow Ctrl-Alt-Del to reboot system. */ init_reboot(RB_ENABLE_CAD); - message(L_CONSOLE | L_LOG, "The system is going down NOW !!"); - sync(); - /* Send signals to every process _except_ pid 1 */ - message(L_CONSOLE | L_LOG, init_sending_format, "TERM"); + message(L_CONSOLE | L_LOG, "Sending SIG%s to all processes", "TERM"); kill(-1, SIGTERM); - sleep(1); sync(); - - message(L_CONSOLE | L_LOG, init_sending_format, "KILL"); - kill(-1, SIGKILL); sleep(1); + message(L_CONSOLE | L_LOG, "Sending SIG%s to all processes", "KILL"); + kill(-1, SIGKILL); sync(); + sleep(1); } static void exec_signal(int sig ATTRIBUTE_UNUSED) @@ -697,26 +643,14 @@ static void exec_signal(int sig ATTRIBUTE_UNUSED) sigaddset(&unblock_signals, SIGTSTP); sigprocmask(SIG_UNBLOCK, &unblock_signals, NULL); - /* Close whatever files are open. */ - close(0); - close(1); - close(2); - /* Open the new terminal device */ - open_new_terminal(a->terminal, 0); - - /* Make sure the terminal will act fairly normal for us */ - set_term(); - /* Setup stdout, stderr on the supplied terminal */ - dup(0); - dup(0); + open_stdio_to_tty(a->terminal, 0); messageD(L_CONSOLE | L_LOG, "Trying to re-exec %s", a->command); BB_EXECLP(a->command, a->command, NULL); - message(L_CONSOLE | L_LOG, "exec of '%s' failed: %m", - a->command); - sync(); + message(L_CONSOLE | L_LOG, "Cannot run '%s': %s", + a->command, strerror(errno)); sleep(2); init_reboot(RB_HALT_SYSTEM); loop_forever(); @@ -741,11 +675,8 @@ static void shutdown_signal(int sig) rb = RB_POWER_OFF; } message(L_CONSOLE | L_LOG, "Requesting system %s", m); - sync(); - /* allow time for last message to reach serial console */ sleep(2); - init_reboot(rb); loop_forever(); } @@ -779,14 +710,9 @@ static void new_init_action(int action, const char *command, const char *cons) { struct init_action *new_action, *a, *last; - if (*cons == '\0') - cons = console_name; - if (strcmp(cons, bb_dev_null) == 0 && (action & ASKFIRST)) return; - new_action = xzalloc(sizeof(struct init_action)); - /* Append to the end of the list */ for (a = last = init_action_list; a; a = a->next) { /* don't enter action if it's already in the list, @@ -795,11 +721,12 @@ static void new_init_action(int action, const char *command, const char *cons) && (strcmp(a->terminal, cons) == 0) ) { a->action = action; - free(new_action); return; } last = a; } + + new_action = xzalloc(sizeof(struct init_action)); if (last) { last->next = new_action; } else { @@ -808,7 +735,7 @@ static void new_init_action(int action, const char *command, const char *cons) strcpy(new_action->command, command); new_action->action = action; strcpy(new_action->terminal, cons); - messageD(L_LOG | L_CONSOLE, "command='%s' action='%d' terminal='%s'\n", + messageD(L_LOG | L_CONSOLE, "command='%s' action=%d tty='%s'\n", new_action->command, new_action->action, new_action->terminal); } @@ -841,11 +768,10 @@ static void parse_inittab(void) #if ENABLE_FEATURE_USE_INITTAB FILE *file; char buf[INIT_BUFFS_SIZE], lineAsRead[INIT_BUFFS_SIZE]; - char tmpConsole[CONSOLE_BUFF_SIZE]; + char tmpConsole[CONSOLE_NAME_SIZE]; char *id, *runlev, *action, *command, *eol; const struct init_action_type *a = actions; - file = fopen(INITTAB, "r"); if (file == NULL) { /* No inittab file -- set up some default behavior */ @@ -925,7 +851,7 @@ static void parse_inittab(void) id += 5; strcpy(tmpConsole, "/dev/"); safe_strncpy(tmpConsole + 5, id, - CONSOLE_BUFF_SIZE - 5); + sizeof(tmpConsole) - 5); id = tmpConsole; } new_init_action(a->action, command, id); @@ -938,7 +864,6 @@ static void parse_inittab(void) } } fclose(file); - return; #endif /* FEATURE_USE_INITTAB */ } @@ -947,7 +872,7 @@ static void reload_signal(int sig ATTRIBUTE_UNUSED) { struct init_action *a, *tmp; - message(L_LOG, "Reloading /etc/inittab"); + message(L_LOG, "reloading /etc/inittab"); /* disable old entrys */ for (a = init_action_list; a; a = a->next ) { @@ -965,7 +890,6 @@ static void reload_signal(int sig ATTRIBUTE_UNUSED) } } run_actions(RESPAWN); - return; } #endif /* FEATURE_USE_INITTAB */ @@ -978,13 +902,13 @@ int init_main(int argc, char **argv) die_sleep = 30 * 24*60*60; /* if xmalloc will ever die... */ if (argc > 1 && !strcmp(argv[1], "-q")) { - return kill(1,SIGHUP); + return kill(1, SIGHUP); } #if !ENABLE_DEBUG_INIT /* Expect to be invoked as init with PID=1 or be invoked as linuxrc */ - if (getpid() != 1 && - (!ENABLE_FEATURE_INITRD || !strstr(applet_name, "linuxrc"))) - { + if (getpid() != 1 + && (!ENABLE_FEATURE_INITRD || !strstr(applet_name, "linuxrc")) + ) { bb_show_usage(); } /* Set up sig handlers -- be sure to @@ -1006,17 +930,7 @@ int init_main(int argc, char **argv) /* Figure out where the default console should be */ console_init(); - - /* Close whatever files are open, and reset the console. */ - close(0); - close(1); - close(2); - - if (device_open(console_name, O_RDWR | O_NOCTTY) == 0) { - set_term(); - close(0); - } - + set_term(); chdir("/"); setsid(); { @@ -1029,7 +943,7 @@ int init_main(int argc, char **argv) if (argc > 1) setenv("RUNLEVEL", argv[1], 1); /* Hello world */ - message(MAYBE_CONSOLE | L_LOG, "init started: %s", bb_msg_full_version); + message(MAYBE_CONSOLE | L_LOG, "init started: %s", bb_msg_full_version); /* Make sure there is enough memory to do something useful. */ if (ENABLE_SWAPONOFF) { @@ -1038,7 +952,7 @@ int init_main(int argc, char **argv) if (!sysinfo(&info) && (info.mem_unit ? : 1) * (long long)info.totalram < 1024*1024) { - message(L_CONSOLE, "Low memory: forcing swapon."); + message(L_CONSOLE, "Low memory, forcing swapon"); /* swapon -a requires /proc typically */ new_init_action(SYSINIT, "mount -t proc proc /proc", ""); /* Try to turn on swap */ @@ -1073,7 +987,7 @@ int init_main(int argc, char **argv) } else if (enforce > 0) { /* SELinux in enforcing mode but load_policy failed */ /* At this point, we probably can't open /dev/console, so log() won't work */ - message(CONSOLE,"Unable to load SELinux Policy. Machine is in enforcing mode. Halting now."); + message(CONSOLE, "Cannot load SELinux Policy. Machine is in enforcing mode. Halting now."); exit(1); } } @@ -1121,7 +1035,7 @@ int init_main(int argc, char **argv) /* Set the pid to 0 so that the process gets * restarted by run_actions() */ a->pid = 0; - message(L_LOG, "Process '%s' (pid %d) exited. " + message(L_LOG, "process '%s' (pid %d) exited. " "Scheduling it for restart.", a->command, wpid); } diff --git a/init/init_shared.c b/init/init_shared.c deleted file mode 100644 index 47480fc..0000000 --- a/init/init_shared.c +++ /dev/null @@ -1,63 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * Stuff shared between init, reboot, halt, and poweroff - * - * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> - * - * Licensed under GPL version 2, see file LICENSE in this tarball for details. - */ - -#include "busybox.h" -#include <sys/reboot.h> -#include <sys/syslog.h> -#include "init_shared.h" - -const char * const init_sending_format = "Sending SIG%s to all processes."; -#ifndef CONFIG_INIT -const char * const bb_shutdown_format = "\r%s\n"; -int bb_shutdown_system(unsigned long magic) -{ - int pri = LOG_KERN|LOG_NOTICE|LOG_FACMASK; - const char *message; - - /* Don't kill ourself */ - signal(SIGTERM,SIG_IGN); - signal(SIGHUP,SIG_IGN); - bb_setpgrp; - - /* Allow Ctrl-Alt-Del to reboot system. */ -#ifndef RB_ENABLE_CAD -#define RB_ENABLE_CAD 0x89abcdef -#endif - reboot(RB_ENABLE_CAD); - - openlog(applet_name, 0, pri); - - message = "\nThe system is going down NOW !!"; - syslog(pri, "%s", message); - printf(bb_shutdown_format, message); - - sync(); - - /* Send signals to every process _except_ pid 1 */ - message = "TERM"; - syslog(pri, init_sending_format, message); - printf(bb_shutdown_format, message); - - kill(-1, SIGTERM); - sleep(1); - sync(); - - message = "KILL"; - syslog(pri, init_sending_format, message); - printf(bb_shutdown_format, message); - - kill(-1, SIGKILL); - sleep(1); - - sync(); - - reboot(magic); - return 0; /* Shrug */ -} -#endif diff --git a/init/init_shared.h b/init/init_shared.h deleted file mode 100644 index 6df8de4..0000000 --- a/init/init_shared.h +++ /dev/null @@ -1,10 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * Helper functions shared by init et al. - * - * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. - */ -extern int kill_init(int sig); -extern int bb_shutdown_system(unsigned long magic); -extern const char * const init_sending_format; - |