diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-09-25 16:09:36 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-09-25 16:09:36 +0000 |
commit | 46ef208603e02ab7cefab6402abfce97456391e7 (patch) | |
tree | 9a32db7c5c8a57b87ea46fade37c81a1a630e2a3 | |
parent | c3f71bc459ac164e8b6ca2123c2531897ab59355 (diff) | |
parent | ad90b45558db9fc1834e2cbf6e6815213c495a6a (diff) | |
download | core-46ef208603e02ab7cefab6402abfce97456391e7.tar.gz |
Merge "fastboot: add new oem command for post wipe userdata" into rvc-qpr-dev
-rw-r--r-- | fastboot/device/commands.cpp | 51 |
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()) { |