reboot.c revision dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <errno.h> 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdio.h> 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdlib.h> 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/reboot.h> 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <unistd.h> 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint reboot_main(int argc, char *argv[]) 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int ret; 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int nosync = 0; 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int poweroff = 0; 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project opterr = 0; 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project do { 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int c; 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project c = getopt(argc, argv, "np"); 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (c == EOF) { 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project switch (c) { 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case 'n': 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nosync = 1; 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case 'p': 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project poweroff = 1; 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case '?': 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "usage: %s [-n] [-p] [rebootcommand]\n", argv[0]); 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project exit(EXIT_FAILURE); 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } while (1); 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(argc > optind + 1) { 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "%s: too many arguments\n", argv[0]); 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project exit(EXIT_FAILURE); 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!nosync) 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sync(); 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(poweroff) 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_POWER_OFF, NULL); 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else if(argc > optind) 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, argv[optind]); 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ret = reboot(RB_AUTOBOOT); 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(ret < 0) { 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project perror("reboot"); 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project exit(EXIT_FAILURE); 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "reboot returned\n"); 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 57