Test the N command
[oweals/busybox.git] / init / halt.c
index 307c1022d3404c97b96a9d2665ac364a3e27ac9c..decdaeafdffc19ca3cc03bcfe463bdbe1df73021 100644 (file)
@@ -2,8 +2,7 @@
 /*
  * Mini halt 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 "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 halt_main(int argc, char **argv)
 {
-#ifdef CONFIG_FEATURE_INITRD
-       /* don't assume init's pid == 1 */
-       pid_t *pid = find_pid_by_name("init");
-       if (!pid || *pid<=0) {
-               pid = find_pid_by_name("linuxrc");
-               if (!pid || *pid<=0)
-                       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, SIGUSR1));
+
+#ifndef CONFIG_INIT
+#ifndef RB_HALT_SYSTEM
+#define RB_HALT_SYSTEM         0xcdef0123
+#endif
+       return(bb_shutdown_system(RB_HALT_SYSTEM));
 #else
-       return(kill(1, SIGUSR1));
+       return kill_init(SIGUSR1);
 #endif
 }