fastboot: add new oem command for post wipe userdata
When user input fastboot erase userdata, need a follow up oem command to wipe other user data in device. We support this new postwipedata command in "fastboot erase userdata" only. Bug: 150929955 Change-Id: I9b6a5a4aaed31d1168e633418b189f9bb6d34d01 Ignore-AOSP-First: I9b6a5a4aaed31d1168e633418b189f9bb6d34d01
This commit is contained in:
parent
7cb8fd1b65
commit
ad90b45558
|
@ -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()) {
|
||||
|
|
Loading…
Reference in New Issue