From 7e31f421a514da09b90e46dbd642a5e9b16e0003 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Fri, 2 Dec 2016 15:33:37 -0800 Subject: write_bootloader_message() should not reset stage field. Commit bd56f1590c967205dc45eb2ec298aa8d2aacb740 switches to calling write_bootloader_message() in get_args(), which unintentionally resets the stage field thus breaks two-step OTAs. This CL changes write_bootloader_message() to only set the command field (to "boot-recovery") and the recovery field (with the specified options). Test: Apply a two-step package. Change-Id: I6905918812c7d3402cc1524688079066a4d22d29 --- bootloader_message/bootloader_message.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'bootloader_message/bootloader_message.cpp') diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index 9a5671843..294b1725d 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -164,7 +164,13 @@ bool clear_bootloader_message(std::string* err) { } bool write_bootloader_message(const std::vector& options, std::string* err) { - bootloader_message boot = {}; + bootloader_message boot; + if (!read_bootloader_message(&boot, err)) { + return false; + } + // Zero out the entire fields. + memset(boot.command, 0, sizeof(boot.command)); + memset(boot.recovery, 0, sizeof(boot.recovery)); strlcpy(boot.command, "boot-recovery", sizeof(boot.command)); strlcpy(boot.recovery, "recovery\n", sizeof(boot.recovery)); for (const auto& s : options) { -- cgit v1.2.3