diff options
author | Tao Bao <tbao@google.com> | 2016-12-15 23:43:32 +0100 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-12-15 23:43:32 +0100 |
commit | 9a707b08ef883723e564833c187c3e8bdf0f9953 (patch) | |
tree | 92da6e8d0b0d4a799a8849d99c17a10b108378f6 /bootloader_message/bootloader_message.cpp | |
parent | Merge "tests: Add tests for bootloader_message." (diff) | |
parent | Merge "Add update_bootloader_message() to fix two-step OTAs." (diff) | |
download | android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.tar android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.tar.gz android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.tar.bz2 android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.tar.lz android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.tar.xz android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.tar.zst android_bootable_recovery-9a707b08ef883723e564833c187c3e8bdf0f9953.zip |
Diffstat (limited to '')
-rw-r--r-- | bootloader_message/bootloader_message.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index 9a5671843..b873d3dc3 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -176,6 +176,27 @@ bool write_bootloader_message(const std::vector<std::string>& options, std::stri return write_bootloader_message(boot, err); } +bool update_bootloader_message(const std::vector<std::string>& options, std::string* err) { + 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) { + strlcat(boot.recovery, s.c_str(), sizeof(boot.recovery)); + if (s.back() != '\n') { + strlcat(boot.recovery, "\n", sizeof(boot.recovery)); + } + } + return write_bootloader_message(boot, err); +} + bool write_reboot_bootloader(std::string* err) { bootloader_message boot; if (!read_bootloader_message(&boot, err)) { |