summaryrefslogtreecommitdiffhomepage
path: root/init/reboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'init/reboot.c')
-rw-r--r--init/reboot.c42
1 files changed, 7 insertions, 35 deletions
diff --git a/init/reboot.c b/init/reboot.c
index 8c380fa6a..be4b97f95 100644
--- a/init/reboot.c
+++ b/init/reboot.c
@@ -27,6 +27,8 @@
#include <getopt.h>
#include "busybox.h"
+#include "init_shared.h"
+
#if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__)
#include <sys/reboot.h>
@@ -42,24 +44,12 @@ static const int RB_AUTOBOOT = 0x01234567;
extern int reboot_main(int argc, char **argv)
{
- int delay = 0; /* delay in seconds before rebooting */
- int rc;
-
- while ((rc = getopt(argc, argv, "d:")) > 0) {
- switch (rc) {
- case 'd':
- delay = atoi(optarg);
- break;
+ char *delay; /* delay in seconds before rebooting */
- default:
- bb_show_usage();
- break;
- }
+ if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
+ sleep(atoi(delay));
}
- if(delay > 0)
- sleep(delay);
-
#ifdef CONFIG_USER_INIT
/* Don't kill ourself */
signal(SIGTERM,SIG_IGN);
@@ -83,29 +73,11 @@ extern int reboot_main(int argc, char **argv)
sleep(1);
sync();
- if (kernelVersion > 0 && kernelVersion <= KERNEL_VERSION(2,2,11)) {
- /* bdflush, kupdate not needed for kernels >2.2.11 */
- bdflush(1, 0);
- sync();
- }
init_reboot(RB_AUTOBOOT);
- exit(0); /* Shrug */
+ return 0; /* Shrug */
#else
-#ifdef CONFIG_FEATURE_INITRD
- {
- /* don't assume init's pid == 1 */
- long *pid = find_pid_by_name("init");
- if (!pid || *pid<=0)
- pid = find_pid_by_name("linuxrc");
- if (!pid || *pid<=0)
- bb_error_msg_and_die("no process killed");
- fflush(stdout);
- return(kill(*pid, SIGTERM));
- }
-#else
- return(kill(1, SIGTERM));
-#endif
+ return kill_init(SIGTERM);
#endif
}