xref: /aosp_15_r20/external/toybox/toys/other/reboot.c (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker /* reboot.c - Restart, halt or powerdown the system.
2*cf5a6c84SAndroid Build Coastguard Worker  *
3*cf5a6c84SAndroid Build Coastguard Worker  * Copyright 2013 Elie De Brauwer <[email protected]>
4*cf5a6c84SAndroid Build Coastguard Worker 
5*cf5a6c84SAndroid Build Coastguard Worker USE_REBOOT(NEWTOY(reboot, "d:fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
6*cf5a6c84SAndroid Build Coastguard Worker USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
7*cf5a6c84SAndroid Build Coastguard Worker USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
8*cf5a6c84SAndroid Build Coastguard Worker 
9*cf5a6c84SAndroid Build Coastguard Worker config REBOOT
10*cf5a6c84SAndroid Build Coastguard Worker   bool "reboot"
11*cf5a6c84SAndroid Build Coastguard Worker   default y
12*cf5a6c84SAndroid Build Coastguard Worker   help
13*cf5a6c84SAndroid Build Coastguard Worker     usage: reboot/halt/poweroff [-fn] [-d DELAY]
14*cf5a6c84SAndroid Build Coastguard Worker 
15*cf5a6c84SAndroid Build Coastguard Worker     Restart, halt, or power off the system.
16*cf5a6c84SAndroid Build Coastguard Worker 
17*cf5a6c84SAndroid Build Coastguard Worker     -d	Wait DELAY before proceeding (in seconds or m/h/d suffix: -d 1.5m = 90s)
18*cf5a6c84SAndroid Build Coastguard Worker     -f	Force reboot (don't signal init, reboot directly)
19*cf5a6c84SAndroid Build Coastguard Worker     -n	Don't sync filesystems before reboot
20*cf5a6c84SAndroid Build Coastguard Worker */
21*cf5a6c84SAndroid Build Coastguard Worker 
22*cf5a6c84SAndroid Build Coastguard Worker #define FOR_reboot
23*cf5a6c84SAndroid Build Coastguard Worker #include "toys.h"
24*cf5a6c84SAndroid Build Coastguard Worker #include <sys/reboot.h>
25*cf5a6c84SAndroid Build Coastguard Worker 
GLOBALS(char * d;)26*cf5a6c84SAndroid Build Coastguard Worker GLOBALS(
27*cf5a6c84SAndroid Build Coastguard Worker   char *d;
28*cf5a6c84SAndroid Build Coastguard Worker )
29*cf5a6c84SAndroid Build Coastguard Worker 
30*cf5a6c84SAndroid Build Coastguard Worker void reboot_main(void)
31*cf5a6c84SAndroid Build Coastguard Worker {
32*cf5a6c84SAndroid Build Coastguard Worker   struct timespec ts;
33*cf5a6c84SAndroid Build Coastguard Worker   int types[] = {RB_AUTOBOOT, RB_HALT_SYSTEM, RB_POWER_OFF},
34*cf5a6c84SAndroid Build Coastguard Worker       sigs[] = {SIGTERM, SIGUSR1, SIGUSR2}, idx;
35*cf5a6c84SAndroid Build Coastguard Worker 
36*cf5a6c84SAndroid Build Coastguard Worker   if (TT.d) {
37*cf5a6c84SAndroid Build Coastguard Worker     xparsetimespec(TT.d, &ts);
38*cf5a6c84SAndroid Build Coastguard Worker     nanosleep(&ts, NULL);
39*cf5a6c84SAndroid Build Coastguard Worker   }
40*cf5a6c84SAndroid Build Coastguard Worker 
41*cf5a6c84SAndroid Build Coastguard Worker   if (!FLAG(n)) sync();
42*cf5a6c84SAndroid Build Coastguard Worker 
43*cf5a6c84SAndroid Build Coastguard Worker   idx = stridx("hp", *toys.which->name)+1;
44*cf5a6c84SAndroid Build Coastguard Worker   if (FLAG(f)) toys.exitval = reboot(types[idx]);
45*cf5a6c84SAndroid Build Coastguard Worker   else toys.exitval = kill(1, sigs[idx]);
46*cf5a6c84SAndroid Build Coastguard Worker }
47