diff options
author | Jeremie Koenig <jk@jk.fr.eu.org> | 2010-05-27 15:38:44 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-19 00:45:51 +0200 |
commit | 714674e4da3d92c5dd14e00ab30794a895b91eb4 (patch) | |
tree | 0d27bc73f1f2fe0175c5fc948451b86c52f9bb90 /init | |
parent | f812eace1863feeac64dc8af27f4ab0f98119618 (diff) |
init,halt: portability improvements
* make init and halt use the same RB_* constants for reboot()
* conditionalize the Linux-specific code
Inspired by init.init.diff from the Debian kFreeBSD patches at:
http://svn.debian.org/viewsvn/d-i/people/slackydeb/kfreebsd/busybox/1.14/debian
Signed-off-by: Jeremie Koenig <jk@jk.fr.eu.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'init')
-rw-r--r-- | init/Config.src | 2 | ||||
-rw-r--r-- | init/halt.c | 14 | ||||
-rw-r--r-- | init/init.c | 16 | ||||
-rw-r--r-- | init/reboot.h | 31 |
4 files changed, 40 insertions, 23 deletions
diff --git a/init/Config.src b/init/Config.src index a5e76be6a..590e29890 100644 --- a/init/Config.src +++ b/init/Config.src @@ -10,7 +10,6 @@ INSERT config INIT bool "init" default y - depends on PLATFORM_LINUX select FEATURE_SYSLOG help init is the first program run when the system boots. @@ -93,7 +92,6 @@ config FEATURE_INITRD config HALT bool "poweroff, halt, and reboot" default y - depends on PLATFORM_LINUX help Stop all processes and either halt, reboot, or power off the system. diff --git a/init/halt.c b/init/halt.c index f1bb2c4a8..abd801fda 100644 --- a/init/halt.c +++ b/init/halt.c @@ -8,7 +8,7 @@ */ #include "libbb.h" -#include <sys/reboot.h> +#include "reboot.h" #if ENABLE_FEATURE_WTMP #include <sys/utsname.h> @@ -36,18 +36,6 @@ static void write_wtmp(void) #define write_wtmp() ((void)0) #endif -#ifndef RB_HALT_SYSTEM -#define RB_HALT_SYSTEM RB_HALT -#endif - -#ifndef RB_POWERDOWN -/* Stop system and switch power off if possible. */ -# define RB_POWERDOWN 0x4321fedc -#endif -#ifndef RB_POWER_OFF -# define RB_POWER_OFF RB_POWERDOWN -#endif - int halt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int halt_main(int argc UNUSED_PARAM, char **argv) diff --git a/init/init.c b/init/init.c index 1388c75cc..d8bf15894 100644 --- a/init/init.c +++ b/init/init.c @@ -12,7 +12,6 @@ #include "libbb.h" #include <syslog.h> #include <paths.h> -#include <sys/reboot.h> #include <sys/resource.h> #ifdef __linux__ #include <linux/vt.h> @@ -20,6 +19,7 @@ #if ENABLE_FEATURE_UTMP # include <utmp.h> /* DEAD_PROCESS */ #endif +#include "reboot.h" /* reboot() constants */ /* Used only for sanitizing purposes in set_sane_term() below. On systems where * the baud rate is stored in a separate field, we can safely disable them. */ @@ -97,13 +97,6 @@ static const char *log_console = VC_5; enum { L_LOG = 0x1, L_CONSOLE = 0x2, -#ifndef RB_HALT_SYSTEM - RB_HALT_SYSTEM = 0xcdef0123, /* FIXME: this overflows enum */ - RB_ENABLE_CAD = 0x89abcdef, - RB_DISABLE_CAD = 0, - RB_POWER_OFF = 0x4321fedc, - RB_AUTOBOOT = 0x01234567, -#endif }; /* Print a message to the specified device. @@ -724,10 +717,12 @@ static void restart_handler(int sig UNUSED_PARAM) run_shutdown_and_kill_processes(); +#ifdef RB_ENABLE_CAD /* Allow Ctrl-Alt-Del to reboot the system. * This is how kernel sets it up for init, we follow suit. */ reboot(RB_ENABLE_CAD); /* misnomer */ +#endif if (open_stdio_to_tty(a->terminal)) { dbg_message(L_CONSOLE, "Trying to re-exec %s", a->command); @@ -870,9 +865,11 @@ int init_main(int argc UNUSED_PARAM, char **argv) ) { bb_show_usage(); } +#ifdef RB_DISABLE_CAD /* Turn off rebooting via CTL-ALT-DEL - we get a * SIGINT on CAD so we can shut things down gracefully... */ reboot(RB_DISABLE_CAD); /* misnomer */ +#endif } /* Figure out where the default console should be */ @@ -895,6 +892,8 @@ int init_main(int argc UNUSED_PARAM, char **argv) message(L_CONSOLE | L_LOG, "init started: %s", bb_banner); #endif +/* struct sysinfo is linux-specific */ +#ifdef __linux__ /* Make sure there is enough memory to do something useful. */ if (ENABLE_SWAPONOFF) { struct sysinfo info; @@ -910,6 +909,7 @@ int init_main(int argc UNUSED_PARAM, char **argv) run_actions(SYSINIT); /* wait and removing */ } } +#endif /* Check if we are supposed to be in single user mode */ if (argv[1] diff --git a/init/reboot.h b/init/reboot.h new file mode 100644 index 000000000..ff045fdd1 --- /dev/null +++ b/init/reboot.h @@ -0,0 +1,31 @@ +/* + * Definitions related to the reboot() system call, + * shared between init.c and halt.c. + */ + +#include <sys/reboot.h> + +#ifndef RB_HALT_SYSTEM +# if defined(__linux__) +# define RB_HALT_SYSTEM 0xcdef0123 +# define RB_ENABLE_CAD 0x89abcdef +# define RB_DISABLE_CAD 0 +# define RB_POWER_OFF 0x4321fedc +# define RB_AUTOBOOT 0x01234567 +# elif defined(RB_HALT) +# define RB_HALT_SYSTEM RB_HALT +# endif +#endif + +/* Stop system and switch power off if possible. */ +#ifndef RB_POWER_OFF +# if defined(RB_POWERDOWN) +# define RB_POWER_OFF RB_POWERDOWN +# elif defined(__linux__) +# define RB_POWER_OFF 0x4321fedc +# else +# warning "poweroff unsupported, using halt as fallback" +# define RB_POWER_OFF RB_HALT_SYSTEM +# endif +#endif + |