summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-09-25 16:09:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-09-25 16:09:36 +0000
commit46ef208603e02ab7cefab6402abfce97456391e7 (patch)
tree9a32db7c5c8a57b87ea46fade37c81a1a630e2a3
parentc3f71bc459ac164e8b6ca2123c2531897ab59355 (diff)
parentad90b45558db9fc1834e2cbf6e6815213c495a6a (diff)
downloadcore-46ef208603e02ab7cefab6402abfce97456391e7.tar.gz
Merge "fastboot: add new oem command for post wipe userdata" into rvc-qpr-dev
-rw-r--r--fastboot/device/commands.cpp51
1 files changed, 50 insertions, 1 deletions
diff --git a/fastboot/device/commands.cpp b/fastboot/device/commands.cpp
index 25533535b..efa5ed1ee 100644
--- a/fastboot/device/commands.cpp
+++ b/fastboot/device/commands.cpp
@@ -164,6 +164,39 @@ bool GetVarHandler(FastbootDevice* device, const std::vector<std::string>& args)
return device->WriteOkay(message);
}
+bool OemPostWipeData(FastbootDevice* device) {
+ auto fastboot_hal = device->fastboot_hal();
+ if (!fastboot_hal) {
+ return false;
+ }
+
+ Result ret;
+ // Check whether fastboot_hal support "oem postwipedata" API or not.
+ const std::string checkPostWipeDataCmd("oem postwipedata support");
+ auto check_cmd_ret_val = fastboot_hal->doOemCommand(checkPostWipeDataCmd,
+ [&](Result result) { ret = result; });
+ if (!check_cmd_ret_val.isOk()) {
+ return false;
+ }
+ if (ret.status != Status::SUCCESS) {
+ return false;
+ }
+
+ const std::string postWipeDataCmd("oem postwipedata userdata");
+ auto ret_val = fastboot_hal->doOemCommand(postWipeDataCmd,
+ [&](Result result) { ret = result; });
+ if (!ret_val.isOk()) {
+ return false;
+ }
+ if (ret.status != Status::SUCCESS) {
+ device->WriteStatus(FastbootResult::FAIL, ret.message);
+ } else {
+ device->WriteStatus(FastbootResult::OKAY, "Erasing succeeded");
+ }
+
+ return true;
+}
+
bool EraseHandler(FastbootDevice* device, const std::vector<std::string>& args) {
if (args.size() < 2) {
return device->WriteStatus(FastbootResult::FAIL, "Invalid arguments");
@@ -184,7 +217,18 @@ bool EraseHandler(FastbootDevice* device, const std::vector<std::string>& args)
return device->WriteStatus(FastbootResult::FAIL, "Partition doesn't exist");
}
if (wipe_block_device(handle.fd(), get_block_device_size(handle.fd())) == 0) {
- return device->WriteStatus(FastbootResult::OKAY, "Erasing succeeded");
+ //Perform oem PostWipeData if Android userdata partition has been erased
+ bool support_oem_postwipedata = false;
+ if (partition_name == "userdata") {
+ support_oem_postwipedata = OemPostWipeData(device);
+ }
+
+ if (!support_oem_postwipedata) {
+ return device->WriteStatus(FastbootResult::OKAY, "Erasing succeeded");
+ } else {
+ //Write device status in OemPostWipeData(), so just return true
+ return true;
+ }
}
return device->WriteStatus(FastbootResult::FAIL, "Erasing failed");
}
@@ -195,6 +239,11 @@ bool OemCmdHandler(FastbootDevice* device, const std::vector<std::string>& args)
return device->WriteStatus(FastbootResult::FAIL, "Unable to open fastboot HAL");
}
+ //Disable "oem postwipedata userdata" to prevent user wipe oem userdata only.
+ if (args[0] == "oem postwipedata userdata") {
+ return device->WriteStatus(FastbootResult::FAIL, "Unable to do oem postwipedata userdata");
+ }
+
Result ret;
auto ret_val = fastboot_hal->doOemCommand(args[0], [&](Result result) { ret = result; });
if (!ret_val.isOk()) {