Patch from Kent Robotti to being fdisk in sync with v2.12 final.
[oweals/busybox.git] / init / poweroff.c
index 126a0fb9496e81fc08c8079127a7bc7a2714f0fb..e5d45dfa048bff50506ca825810aa7e1a83737d0 100644 (file)
@@ -2,8 +2,7 @@
 /*
  * Mini poweroff implementation for busybox
  *
- *
- * Copyright (C) 1995, 1996 by Bruce Perens <bruce@pixar.com>.
+ * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  */
 
-#include "internal.h"
 #include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/reboot.h>
+#include "busybox.h"
+#include "init_shared.h"
+
 
 extern int poweroff_main(int argc, char **argv)
 {
-#ifdef BB_FEATURE_LINUXRC
-       /* don't assume init's pid == 1 */
-       return(kill(*(findPidByName("init")), SIGUSR2));
+       char *delay; /* delay in seconds before rebooting */
+
+       if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
+               sleep(atoi(delay));
+       }
+
+#ifndef CONFIG_INIT
+#ifndef RB_POWER_OFF
+#define RB_POWER_OFF           0x4321fedc
+#endif
+       return(bb_shutdown_system(RB_POWER_OFF));
 #else
-       return(kill(1, SIGUSR2));
+       return kill_init(SIGUSR2);
 #endif
 }
+
+/*
+Local Variables:
+c-file-style: "linux"
+c-basic-offset: 4
+tab-width: 4
+End:
+*/