Patch from vodz:
[oweals/busybox.git] / init / poweroff.c
index 405ca3fe2f7ea47c45400f1d8c3a048fb0dc3060..e5d45dfa048bff50506ca825810aa7e1a83737d0 100644 (file)
@@ -1,8 +1,8 @@
+/* vi: set sw=4 ts=4: */
 /*
  * 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)
+extern int poweroff_main(int argc, char **argv)
 {
-    /* don't assume init's pid == 1 */
-    exit( kill(findInitPid(), 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_init(SIGUSR2);
+#endif
 }
+
+/*
+Local Variables:
+c-file-style: "linux"
+c-basic-offset: 4
+tab-width: 4
+End:
+*/