/* reboot.c - Restart, halt or powerdown the system. * * Copyright 2013 Elie De Brauwer 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 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]); }