Remove utils::DeviceForMountPoint(). We only use it to get misc block device path, it can be replaced with get_bootloader_message_blk_device(), and for writing bootloader message, we can use update_bootloader_message() instead. Also removed dependency on libfs_mgr since we are now using libbootloader_message instead of using libfs_mgr directly. Bug: None Test: update_engine_unittests Test: perform an OTA with powerwash Change-Id: I80d0eea8e3ef6084820298cc0079da26fe1bfc63
diff --git a/hardware_android.cc b/hardware_android.cc index 9dd8bb6..a8a479d 100644 --- a/hardware_android.cc +++ b/hardware_android.cc
@@ -16,22 +16,16 @@ #include "update_engine/hardware_android.h" -#include <fcntl.h> -#include <sys/stat.h> #include <sys/types.h> -#include <algorithm> #include <memory> #include <android-base/properties.h> #include <base/files/file_util.h> -#include <base/strings/stringprintf.h> #include <bootloader_message/bootloader_message.h> #include "update_engine/common/hardware.h" #include "update_engine/common/platform_constants.h" -#include "update_engine/common/utils.h" -#include "update_engine/utils_android.h" using android::base::GetBoolProperty; using android::base::GetIntProperty; @@ -42,12 +36,6 @@ namespace { -// The powerwash arguments passed to recovery. Arguments are separated by \n. -const char kAndroidRecoveryPowerwashCommand[] = - "recovery\n" - "--wipe_data\n" - "--reason=wipe_data_from_ota\n"; - // Android properties that identify the hardware and potentially non-updatable // parts of the bootloader (such as the bootloader version and the baseband // version). @@ -58,39 +46,6 @@ const char kPropBootRevision[] = "ro.boot.revision"; const char kPropBuildDateUTC[] = "ro.build.date.utc"; -// Write a recovery command line |message| to the BCB. The arguments to recovery -// must be separated by '\n'. An empty string will erase the BCB. -bool WriteBootloaderRecoveryMessage(const string& message) { - base::FilePath misc_device; - if (!utils::DeviceForMountPoint("/misc", &misc_device)) - return false; - - // Setup a bootloader_message with just the command and recovery fields set. - bootloader_message boot = {}; - if (!message.empty()) { - strncpy(boot.command, "boot-recovery", sizeof(boot.command) - 1); - memcpy(boot.recovery, - message.data(), - std::min(message.size(), sizeof(boot.recovery) - 1)); - } - - int fd = HANDLE_EINTR(open(misc_device.value().c_str(), O_WRONLY | O_SYNC)); - if (fd < 0) { - PLOG(ERROR) << "Opening misc"; - return false; - } - ScopedFdCloser fd_closer(&fd); - // We only re-write the first part of the bootloader_message, up to and - // including the recovery message. - size_t boot_size = - offsetof(bootloader_message, recovery) + sizeof(boot.recovery); - if (!utils::WriteAll(fd, &boot, boot_size)) { - PLOG(ERROR) << "Writing recovery command to misc"; - return false; - } - return true; -} - } // namespace namespace hardware { @@ -199,11 +154,22 @@ bool HardwareAndroid::SchedulePowerwash() { LOG(INFO) << "Scheduling a powerwash to BCB."; - return WriteBootloaderRecoveryMessage(kAndroidRecoveryPowerwashCommand); + string err; + if (!update_bootloader_message({"--wipe_data", "--reason=wipe_data_from_ota"}, + &err)) { + LOG(ERROR) << "Failed to update bootloader message: " << err; + return false; + } + return true; } bool HardwareAndroid::CancelPowerwash() { - return WriteBootloaderRecoveryMessage(""); + string err; + if (!clear_bootloader_message(&err)) { + LOG(ERROR) << "Failed to clear bootloader message: " << err; + return false; + } + return true; } bool HardwareAndroid::GetNonVolatileDirectory(base::FilePath* path) const {