From dae48ef41ef62fd0b416123995a6bc7eea4f3761 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 6 Apr 2020 14:38:58 +0200 Subject: [PATCH] fastboot: Bring back legacy A/B support Some devices, such as the Essential PH-1, don't have an updated bootloader and the bootloader is appending an extra underscore. This patch works around that issue by sanitizing the slot to be inline with modern expectations. Offending commit: https://github.com/aosp-mirror/platform_system_core/commit/42b18a518bac85c3eea14206f6cbafbd1e98a31f Most of the commit above is not needed because an underscore + slot is automatically appended when flashing to a partition. Normally, this would result in something like boot__b instead of boot_b, where b is the current slot. Test: flash an image on mata without specifying slot, boots Change-Id: Ia0b7cee603a4f9ba2e3a61ce6e369ca8c07a7caf --- fastboot/fastboot.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp index f7edf8e61..38be934b9 100644 --- a/fastboot/fastboot.cpp +++ b/fastboot/fastboot.cpp @@ -1103,6 +1103,7 @@ static void flash_buf(const std::string& partition, struct fastboot_buffer *buf) static std::string get_current_slot() { std::string current_slot; if (fb->GetVar("current-slot", ¤t_slot) != fastboot::SUCCESS) return ""; + if (current_slot[0] == '_') current_slot.erase(0, 1); return current_slot; } @@ -1950,6 +1951,7 @@ int FastBootTool::Main(int argc, char* argv[]) { if (slot_override == "") { std::string current_slot; if (fb->GetVar("current-slot", ¤t_slot) == fastboot::SUCCESS) { + if (current_slot[0] == '_') current_slot.erase(0, 1); next_active = verify_slot(current_slot, false); } else { wants_set_active = false;