From 714674e4da3d92c5dd14e00ab30794a895b91eb4 Mon Sep 17 00:00:00 2001 From: Jeremie Koenig Date: Thu, 27 May 2010 15:38:44 +0200 Subject: [PATCH] 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 Signed-off-by: Denys Vlasenko --- init/Config.src | 2 -- init/halt.c | 14 +------------- init/init.c | 16 ++++++++-------- init/reboot.h | 31 +++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 init/reboot.h 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 +#include "reboot.h" #if ENABLE_FEATURE_WTMP #include @@ -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 #include -#include #include #ifdef __linux__ #include @@ -20,6 +19,7 @@ #if ENABLE_FEATURE_UTMP # include /* 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 + +#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 +