12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- /* 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]);
- }
|