From b76a73a1a996e408476f388f57ea497dccc8fa48 Mon Sep 17 00:00:00 2001 From: dianlujitao Date: Thu, 30 Apr 2020 20:33:20 +0800 Subject: [PATCH] Fix backup and restore after autodetection for SAR This reverts commit 8a411c8d257bf37a31907fc44be7cedf447aad7f. * Always use "/system" to interact with the frontend and replace it with the detected path before taking actions. * Don't replace the pretty display name and backup name set during processing fstab after wipe. This improves UX and ensures that the system backup is always named system.ext4.win despite the actual mount point is /system_root so TWRP is able to recover either SAR or non-SAR backups. Change-Id: Ie2594d2678d0c75ce25c0d1087d47b035b3f10e9 --- openrecoveryscript.cpp | 10 +++++----- partition.cpp | 10 ++++------ partitionmanager.cpp | 12 ++++++++++-- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/openrecoveryscript.cpp b/openrecoveryscript.cpp index 6d762986..903bc6c8 100755 --- a/openrecoveryscript.cpp +++ b/openrecoveryscript.cpp @@ -148,8 +148,8 @@ int OpenRecoveryScript::run_script_file(void) { // Wipe if (strcmp(value, "cache") == 0 || strcmp(value, "/cache") == 0) { PartitionManager.Wipe_By_Path("/cache"); - } else if (strcmp(value, PartitionManager.Get_Android_Root_Path().c_str()) == 0 || strcmp(value, PartitionManager.Get_Android_Root_Path().c_str()) == 0) { - PartitionManager.Wipe_By_Path(PartitionManager.Get_Android_Root_Path()); + } else if (strcmp(value, "system") == 0 || strcmp(value, "/system") == 0 || strcmp(value, PartitionManager.Get_Android_Root_Path().c_str()) == 0) { + PartitionManager.Wipe_By_Path("/system"); } else if (strcmp(value, "dalvik") == 0 || strcmp(value, "dalvick") == 0 || strcmp(value, "dalvikcache") == 0 || strcmp(value, "dalvickcache") == 0) { PartitionManager.Wipe_Dalvik_Cache(); } else if (strcmp(value, "data") == 0 || strcmp(value, "/data") == 0 || strcmp(value, "factory") == 0 || strcmp(value, "factoryreset") == 0) { @@ -253,8 +253,8 @@ int OpenRecoveryScript::run_script_file(void) { gui_msg(Msg("set_restore_opt=Setting restore options: '{1}':")(value2)); line_len = strlen(value2); for (i=0; i::iterator iter; string Local_Path = TWFunc::Get_Root_Path(Path); + if (Local_Path == "/system") + Local_Path = Get_Android_Root_Path(); for (iter = Partitions.begin(); iter != Partitions.end(); iter++) { if ((*iter)->Mount_Point == Local_Path || (!(*iter)->Symlink_Mount_Point.empty() && (*iter)->Symlink_Mount_Point == Local_Path)) return (*iter); @@ -1273,8 +1275,12 @@ void TWPartitionManager::Set_Restore_Files(string Restore_Name) { Part->Backup_FileName.resize(Part->Backup_FileName.size() - strlen(extn) + 3); } - if (!Part->Is_SubPartition) - Restore_List += Part->Backup_Path + ";"; + if (!Part->Is_SubPartition) { + if (Part->Backup_Path == Get_Android_Root_Path()) + Restore_List += "/system;"; + else + Restore_List += Part->Backup_Path + ";"; + } } closedir(d); } @@ -1297,6 +1303,8 @@ int TWPartitionManager::Wipe_By_Path(string Path) { bool found = false; string Local_Path = TWFunc::Get_Root_Path(Path); + if (Local_Path == "/system") + Local_Path = Get_Android_Root_Path(); // Iterate through all partitions for (iter = Partitions.begin(); iter != Partitions.end(); iter++) { if ((*iter)->Mount_Point == Local_Path || (!(*iter)->Symlink_Mount_Point.empty() && (*iter)->Symlink_Mount_Point == Local_Path)) {