diff options
Diffstat (limited to 'recovery.cpp')
-rw-r--r-- | recovery.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/recovery.cpp b/recovery.cpp index db35f1e97..8d3731540 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -57,6 +57,7 @@ static const struct option OPTIONS[] = { { "just_exit", no_argument, NULL, 'x' }, { "locale", required_argument, NULL, 'l' }, { "stages", required_argument, NULL, 'g' }, + { "shutdown_after", no_argument, NULL, 'p' }, { NULL, 0, NULL, 0 }, }; @@ -177,11 +178,11 @@ get_args(int *argc, char ***argv) { stage = strndup(boot.stage, sizeof(boot.stage)); if (boot.command[0] != 0 && boot.command[0] != 255) { - LOGI("Boot command: %.*s\n", sizeof(boot.command), boot.command); + LOGI("Boot command: %.*s\n", (int)sizeof(boot.command), boot.command); } if (boot.status[0] != 0 && boot.status[0] != 255) { - LOGI("Boot status: %.*s\n", sizeof(boot.status), boot.status); + LOGI("Boot status: %.*s\n", (int)sizeof(boot.status), boot.status); } // --- if arguments weren't supplied, look in the bootloader control block @@ -945,16 +946,15 @@ main(int argc, char **argv) { rotate_last_logs(10); get_args(&argc, &argv); - int previous_runs = 0; const char *send_intent = NULL; const char *update_package = NULL; int wipe_data = 0, wipe_cache = 0, show_text = 0; bool just_exit = false; + bool shutdown_after = false; int arg; while ((arg = getopt_long(argc, argv, "", OPTIONS, NULL)) != -1) { switch (arg) { - case 'p': previous_runs = atoi(optarg); break; case 's': send_intent = optarg; break; case 'u': update_package = optarg; break; case 'w': wipe_data = wipe_cache = 1; break; @@ -970,6 +970,7 @@ main(int argc, char **argv) { } break; } + case 'p': shutdown_after = true; break; case '?': LOGE("Invalid command argument\n"); continue; @@ -986,6 +987,7 @@ main(int argc, char **argv) { ui = device->GetUI(); gCurrentUI = ui; + ui->SetLocale(locale); ui->Init(); int st_cur, st_max; @@ -993,7 +995,6 @@ main(int argc, char **argv) { ui->SetStage(st_cur, st_max); } - ui->SetLocale(locale); ui->SetBackground(RecoveryUI::NONE); if (show_text) ui->ShowText(true); @@ -1079,7 +1080,12 @@ main(int argc, char **argv) { // Otherwise, get ready to boot the main system... finish_recovery(send_intent); - ui->Print("Rebooting...\n"); - property_set(ANDROID_RB_PROPERTY, "reboot,"); + if (shutdown_after) { + ui->Print("Shutting down...\n"); + property_set(ANDROID_RB_PROPERTY, "shutdown,"); + } else { + ui->Print("Rebooting...\n"); + property_set(ANDROID_RB_PROPERTY, "reboot,"); + } return EXIT_SUCCESS; } |