import lsattr and chattr from e2fsprogs
[oweals/busybox.git] / init / poweroff.c
index aca6e2f2512d51923fe6c6bf8258a49a97b6cc79..81695087dfc82a571efb5d1f376d06e004d21ee6 100644 (file)
@@ -2,8 +2,7 @@
 /*
  * Mini poweroff implementation for busybox
  *
- * Copyright (C) 1995, 1996 by Bruce Perens <bruce@pixar.com>.
- * Copyright (C) 1999-2002 by Erik Andersen <andersee@debian.org>
+ * Copyright (C) 1999-2004 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 "busybox.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 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");
+       char *delay; /* delay in seconds before rebooting */
+
+       if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
+               sleep(atoi(delay));
        }
-       return(kill(*pid, SIGUSR2));
+
+#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:
+*/