+RB_AUTOBOOT
+ };
+ static const int signals[] = { SIGUSR1, SIGUSR2, SIGTERM };
+
+ char *delay;
+ int which, flags, rc = 1;
+
+ /* Figure out which applet we're running */
+ for (which = 0; "hpr"[which] != *applet_name; which++);
+
+ /* Parse and handle arguments */
+ flags = getopt32(argc, argv, "d:nf", &delay);
+ if (flags & 1) sleep(xatou(delay));
+ if (!(flags & 2)) sync();
+
+ /* Perform action. */
+ if (ENABLE_INIT && !(flags & 4)) {
+ if (ENABLE_FEATURE_INITRD) {
+ pid_t *pidlist = find_pid_by_name("linuxrc");
+ if (pidlist[0] > 0)
+ rc = kill(pidlist[0], signals[which]);
+ if (ENABLE_FEATURE_CLEAN_UP)
+ free(pidlist);
+ }
+ if (rc)
+ rc = kill(1, signals[which]);
+ } else
+ rc = reboot(magic[which]);
+
+ if (rc)
+ bb_error_msg("no");
+ return rc;