summaryrefslogtreecommitdiffstats
path: root/reboot/reboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'reboot/reboot.c')
-rw-r--r--reboot/reboot.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/reboot/reboot.c b/reboot/reboot.c
index 45d8a8e..0e5170d 100644
--- a/reboot/reboot.c
+++ b/reboot/reboot.c
@@ -17,35 +17,34 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <cutils/properties.h>
#include <cutils/android_reboot.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret;
- int nosync = 0;
- int poweroff = 0;
- int flags = 0;
+ size_t prop_len;
+ char property_val[PROPERTY_VALUE_MAX];
+ const char *cmd = "reboot";
+ char *optarg = "";
opterr = 0;
do {
int c;
- c = getopt(argc, argv, "np");
+ c = getopt(argc, argv, "p");
if (c == EOF) {
break;
}
switch (c) {
- case 'n':
- nosync = 1;
- break;
case 'p':
- poweroff = 1;
+ cmd = "shutdown";
break;
case '?':
- fprintf(stderr, "usage: %s [-n] [-p] [rebootcommand]\n", argv[0]);
+ fprintf(stderr, "usage: %s [-p] [rebootcommand]\n", argv[0]);
exit(EXIT_FAILURE);
}
} while (1);
@@ -55,20 +54,20 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
- if(nosync)
- /* also set NO_REMOUNT_RO as remount ro includes an implicit sync */
- flags = ANDROID_RB_FLAG_NO_SYNC | ANDROID_RB_FLAG_NO_REMOUNT_RO;
+ if (argc > optind)
+ optarg = argv[optind];
+
+ prop_len = snprintf(property_val, sizeof(property_val), "%s,%s", cmd, optarg);
+ if (prop_len >= sizeof(property_val)) {
+ fprintf(stderr, "reboot command too long: %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
- if(poweroff)
- ret = android_reboot(ANDROID_RB_POWEROFF, flags, 0);
- else if(argc > optind)
- ret = android_reboot(ANDROID_RB_RESTART2, flags, argv[optind]);
- else
- ret = android_reboot(ANDROID_RB_RESTART, flags, 0);
+ ret = property_set(ANDROID_RB_PROPERTY, property_val);
if(ret < 0) {
perror("reboot");
exit(EXIT_FAILURE);
}
- fprintf(stderr, "reboot returned\n");
+ fprintf(stderr, "Done\n");
return 0;
}