diff options
Diffstat (limited to 'bootloader_message/bootloader_message.cpp')
-rw-r--r-- | bootloader_message/bootloader_message.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index e9dd0d4d..2d743e73 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -26,6 +26,7 @@ #include <vector> #include <android-base/file.h> +#include <android-base/hex.h> #include <android-base/properties.h> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> @@ -324,6 +325,33 @@ bool WriteMiscKcmdlineMessage(const misc_kcmdline_message& message, std::string* offsetof(misc_system_space_layout, kcmdline_message), err); } +bool ReadMiscControlMessage(misc_control_message* message, std::string* err) { + return ReadMiscPartitionSystemSpace(message, sizeof(*message), + offsetof(misc_system_space_layout, control_message), err); +} + +bool WriteMiscControlMessage(const misc_control_message& message, std::string* err) { + return WriteMiscPartitionSystemSpace(&message, sizeof(message), + offsetof(misc_system_space_layout, control_message), err); +} + +bool CheckReservedSystemSpaceEmpty(bool* empty, std::string* err) { + constexpr size_t kReservedSize = SYSTEM_SPACE_SIZE_IN_MISC - sizeof(misc_system_space_layout); + + uint8_t space[kReservedSize]; + if (!ReadMiscPartitionSystemSpace(&space, kReservedSize, sizeof(misc_system_space_layout), err)) { + return false; + } + + *empty = space[0] == 0 && 0 == memcmp(space, space + 1, kReservedSize - 1); + + if (!*empty) { + *err = android::base::HexString(space, kReservedSize); + } + + return true; +} + extern "C" bool write_reboot_bootloader(void) { std::string err; return write_reboot_bootloader(&err); |