47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
/* reboot.c - Restart, halt or powerdown the system.
|
|
*
|
|
* Copyright 2013 Elie De Brauwer <eliedebrauwer@gmail.com>
|
|
|
|
USE_REBOOT(NEWTOY(reboot, "d:fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
|
|
USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
|
|
USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
|
|
|
|
config REBOOT
|
|
bool "reboot"
|
|
default y
|
|
help
|
|
usage: reboot/halt/poweroff [-fn] [-d DELAY]
|
|
|
|
Restart, halt, or power off the system.
|
|
|
|
-d Wait DELAY before proceeding (in seconds or m/h/d suffix: -d 1.5m = 90s)
|
|
-f Force reboot (don't signal init, reboot directly)
|
|
-n Don't sync filesystems before reboot
|
|
*/
|
|
|
|
#define FOR_reboot
|
|
#include "toys.h"
|
|
#include <sys/reboot.h>
|
|
|
|
GLOBALS(
|
|
char *d;
|
|
)
|
|
|
|
void reboot_main(void)
|
|
{
|
|
struct timespec ts;
|
|
int types[] = {RB_AUTOBOOT, RB_HALT_SYSTEM, RB_POWER_OFF},
|
|
sigs[] = {SIGTERM, SIGUSR1, SIGUSR2}, idx;
|
|
|
|
if (TT.d) {
|
|
xparsetimespec(TT.d, &ts);
|
|
nanosleep(&ts, NULL);
|
|
}
|
|
|
|
if (!FLAG(n)) sync();
|
|
|
|
idx = stridx("hp", *toys.which->name)+1;
|
|
if (FLAG(f)) toys.exitval = reboot(types[idx]);
|
|
else toys.exitval = kill(1, sigs[idx]);
|
|
}
|