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 {