diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp index 4e4f431b6..9e222f7ff 100644 --- a/fastboot/fastboot.cpp +++ b/fastboot/fastboot.cpp @@ -2192,7 +2192,7 @@ int FastBootTool::Main(int argc, char* argv[]) { } } } - std::unique_ptr reboot_task = nullptr; + std::vector> tasks; std::vector args(argv, argv + argc); while (!args.empty()) { std::string command = next_arg(&args); @@ -2246,17 +2246,17 @@ int FastBootTool::Main(int argc, char* argv[]) { } else if (command == FB_CMD_REBOOT) { if (args.size() == 1) { std::string reboot_target = next_arg(&args); - reboot_task = std::make_unique(fp.get(), reboot_target); + tasks.emplace_back(std::make_unique(fp.get(), reboot_target)); } else if (!fp->skip_reboot) { - reboot_task = std::make_unique(fp.get()); + tasks.emplace_back(std::make_unique(fp.get())); } if (!args.empty()) syntax_error("junk after reboot command"); } else if (command == FB_CMD_REBOOT_BOOTLOADER) { - reboot_task = std::make_unique(fp.get(), "bootloader"); + tasks.emplace_back(std::make_unique(fp.get(), "bootloader")); } else if (command == FB_CMD_REBOOT_RECOVERY) { - reboot_task = std::make_unique(fp.get(), "recovery"); + tasks.emplace_back(std::make_unique(fp.get(), "recovery")); } else if (command == FB_CMD_REBOOT_FASTBOOT) { - reboot_task = std::make_unique(fp.get(), "fastboot"); + tasks.emplace_back(std::make_unique(fp.get(), "fastboot")); } else if (command == FB_CMD_CONTINUE) { fb->Continue(); } else if (command == FB_CMD_BOOT) { @@ -2278,7 +2278,7 @@ int FastBootTool::Main(int argc, char* argv[]) { } if (fname.empty()) die("cannot determine image filename for '%s'", pname.c_str()); - FlashTask task(slot_override, pname, fname, is_vbmeta_partition(pname)); + FlashTask task(fp->slot_override, pname, fname, is_vbmeta_partition(pname)); task.Run(); } else if (command == "flash:raw") { std::string partition = next_arg(&args); @@ -2298,12 +2298,11 @@ int FastBootTool::Main(int argc, char* argv[]) { fprintf(stderr, "Warning: slot set to 'all'. Secondary slots will not be flashed.\n"); fp->skip_secondary = true; - do_flashall(fp.get()); - } else { - do_flashall(fp.get()); } + do_flashall(fp.get()); + if (!fp->skip_reboot) { - reboot_task = std::make_unique(fp.get()); + tasks.emplace_back(std::make_unique(fp.get())); } } else if (command == "update") { bool slot_all = (slot_override == "all"); @@ -2317,7 +2316,7 @@ int FastBootTool::Main(int argc, char* argv[]) { } do_update(filename.c_str(), fp.get()); if (!fp->skip_reboot) { - reboot_task = std::make_unique(fp.get()); + tasks.emplace_back(std::make_unique(fp.get())); } } else if (command == FB_CMD_SET_ACTIVE) { std::string slot = verify_slot(next_arg(&args), false); @@ -2351,13 +2350,12 @@ int FastBootTool::Main(int argc, char* argv[]) { fb->CreatePartition(partition, size); } else if (command == FB_CMD_DELETE_PARTITION) { std::string partition = next_arg(&args); - auto delete_task = std::make_unique(fp.get(), partition); - fb->DeletePartition(partition); + tasks.emplace_back(std::make_unique(fp.get(), partition)); } else if (command == FB_CMD_RESIZE_PARTITION) { std::string partition = next_arg(&args); std::string size = next_arg(&args); std::unique_ptr resize_task = - std::make_unique(fp.get(), partition, size, slot_override); + std::make_unique(fp.get(), partition, size, fp->slot_override); resize_task->Run(); } else if (command == "gsi") { std::string arg = next_arg(&args); @@ -2400,15 +2398,14 @@ int FastBootTool::Main(int argc, char* argv[]) { } std::vector partitions = {"userdata", "cache", "metadata"}; for (const auto& partition : partitions) { - std::unique_ptr wipe_task = std::make_unique(fp.get(), partition); - wipe_task->Run(); + tasks.emplace_back(std::make_unique(fp.get(), partition)); } } if (fp->wants_set_active) { fb->SetActive(next_active); } - if (reboot_task) { - reboot_task->Run(); + for (auto& task : tasks) { + task->Run(); } fprintf(stderr, "Finished. Total time: %.3fs\n", (now() - start));