Skip to content

Commit c0d40de

Browse files
Dees-Troyjcadduono
authored andcommitted
Clean up PartitionSettings
The PartitionSettings struct contains some data elements that are duplicates of data elements in the TWPartition class that is contained within the PartitionsSettings.Part element. We will eliminate this duplication to help reduce the chances for programming bugs. Specifically, this fixes problems where the current file system does not match the backed up file system. Change-Id: I02f236e72093362050556a2e53a09d1dbb9a269d
1 parent c08b236 commit c0d40de

File tree

5 files changed

+49
-56
lines changed

5 files changed

+49
-56
lines changed

gui/action.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,9 +1739,11 @@ int GUIAction::flashimage(std::string arg __unused)
17391739

17401740
PartitionSettings part_settings;
17411741
operation_start("Flash Image");
1742-
DataManager::GetValue("tw_zip_location", part_settings.Restore_Name);
1743-
DataManager::GetValue("tw_file", part_settings.Backup_FileName);
1744-
unsigned long long total_bytes = TWFunc::Get_File_Size(part_settings.Restore_Name + "/" + part_settings.Backup_FileName);
1742+
string path, filename;
1743+
DataManager::GetValue("tw_zip_location", path);
1744+
DataManager::GetValue("tw_file", filename);
1745+
part_settings.Backup_Folder = path + "/" + filename;
1746+
unsigned long long total_bytes = TWFunc::Get_File_Size(part_settings.Backup_Folder);
17451747
ProgressTracking progress(total_bytes);
17461748
part_settings.progress = &progress;
17471749
part_settings.adbbackup = false;

openrecoveryscript.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -840,11 +840,10 @@ int OpenRecoveryScript::Restore_ADB_Backup(void) {
840840
pos = Restore_Name.find_last_of("/");
841841
Backup_FileName = Restore_Name.substr(pos + 1, Restore_Name.size());
842842
part_settings.Part = PartitionManager.Find_Partition_By_Path(path);
843-
part_settings.Restore_Name = path;
843+
part_settings.Backup_Folder = path;
844844
part_settings.partition_count = partition_count;
845845
part_settings.adbbackup = true;
846846
part_settings.adb_compression = twimghdr.compressed;
847-
part_settings.Backup_FileName = Backup_FileName;
848847
part_settings.PM_Method = PM_RESTORE;
849848
ProgressTracking progress(part_settings.total_restore_size);
850849
part_settings.progress = &progress;
@@ -871,7 +870,6 @@ int OpenRecoveryScript::Restore_ADB_Backup(void) {
871870
pos = Restore_Name.find_last_of("/");
872871
Backup_FileName = Restore_Name.substr(pos + 1, Restore_Name.size());
873872
pos = Restore_Name.find_last_of("/");
874-
part_settings.Restore_Name = Restore_Name.substr(0, pos);
875873
part_settings.Part = PartitionManager.Find_Partition_By_Path(path);
876874

877875
if (path.compare("/system") == 0) {
@@ -893,7 +891,6 @@ int OpenRecoveryScript::Restore_ADB_Backup(void) {
893891
part_settings.partition_count = partition_count;
894892
part_settings.adbbackup = true;
895893
part_settings.adb_compression = twimghdr.compressed;
896-
part_settings.Backup_FileName = Backup_FileName;
897894
part_settings.total_restore_size += part_settings.Part->Get_Restore_Size(&part_settings);
898895
part_settings.PM_Method = PM_RESTORE;
899896
ProgressTracking progress(part_settings.total_restore_size);

partition.cpp

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1621,7 +1621,7 @@ bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
16211621
sync();
16221622

16231623
memset(split_filename, 0, sizeof(split_filename));
1624-
Full_Filename = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
1624+
Full_Filename = part_settings->Backup_Folder + "/" + Backup_FileName;
16251625
if (!TWFunc::Path_Exists(Full_Filename)) {
16261626
// This is a split archive, we presume
16271627
sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
@@ -1662,7 +1662,7 @@ bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
16621662

16631663
bool TWPartition::Restore(PartitionSettings *part_settings) {
16641664
TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, gui_parse_text("{@restoring_hdr}"));
1665-
LOGINFO("Restore filename is: %s/%s\n", part_settings->Restore_Name.c_str(), part_settings->Backup_FileName.c_str());
1665+
LOGINFO("Restore filename is: %s%s\n", part_settings->Backup_Folder.c_str(), Backup_FileName.c_str());
16661666

16671667
string Restore_File_System = Get_Restore_File_System(part_settings);
16681668

@@ -1680,12 +1680,12 @@ string TWPartition::Get_Restore_File_System(PartitionSettings *part_settings) {
16801680
string Restore_File_System;
16811681

16821682
// Parse backup filename to extract the file system before wiping
1683-
first_period = part_settings->Backup_FileName.find(".");
1683+
first_period = Backup_FileName.find(".");
16841684
if (first_period == string::npos) {
16851685
LOGERR("Unable to find file system (first period).\n");
16861686
return string();
16871687
}
1688-
Restore_File_System = part_settings->Backup_FileName.substr(first_period + 1, part_settings->Backup_FileName.size() - first_period - 1);
1688+
Restore_File_System = Backup_FileName.substr(first_period + 1, Backup_FileName.size() - first_period - 1);
16891689
second_period = Restore_File_System.find(".");
16901690
if (second_period == string::npos) {
16911691
LOGERR("Unable to find file system (second period).\n");
@@ -2167,14 +2167,14 @@ bool TWPartition::Backup_Tar(PartitionSettings *part_settings, pid_t *tar_fork_p
21672167
#endif
21682168

21692169
Backup_FileName = Backup_Name + "." + Current_File_System + ".win";
2170-
Full_FileName = part_settings->Full_Backup_Path + Backup_FileName;
2170+
Full_FileName = part_settings->Backup_Folder + Backup_FileName;
21712171
tar.has_data_media = Has_Data_Media;
21722172
tar.part_settings = part_settings;
21732173
tar.setdir(Backup_Path);
21742174
tar.setfn(Full_FileName);
21752175
tar.setsize(Backup_Size);
21762176
tar.partition_name = Backup_Name;
2177-
tar.backup_folder = part_settings->Full_Backup_Path;
2177+
tar.backup_folder = part_settings->Backup_Folder;
21782178
if (tar.createTarFork(tar_fork_pid) != 0)
21792179
return false;
21802180
return true;
@@ -2191,10 +2191,10 @@ bool TWPartition::Backup_Image(PartitionSettings *part_settings) {
21912191

21922192
if (part_settings->adbbackup) {
21932193
Full_FileName = TW_ADB_BACKUP;
2194-
adb_file_name = part_settings->Full_Backup_Path + "/" + Backup_FileName;
2194+
adb_file_name = part_settings->Backup_Folder + "/" + Backup_FileName;
21952195
}
21962196
else
2197-
Full_FileName = part_settings->Full_Backup_Path + "/" + Backup_FileName;
2197+
Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
21982198

21992199
part_settings->total_restore_size = Backup_Size;
22002200

@@ -2227,14 +2227,14 @@ bool TWPartition::Raw_Read_Write(PartitionSettings *part_settings) {
22272227
if (part_settings->adbbackup)
22282228
destfn = TW_ADB_BACKUP;
22292229
else
2230-
destfn = part_settings->Full_Backup_Path + part_settings->Backup_FileName;
2230+
destfn = part_settings->Backup_Folder + Backup_FileName;
22312231
}
22322232
else {
22332233
destfn = Actual_Block_Device;
22342234
if (part_settings->adbbackup) {
22352235
srcfn = TW_ADB_RESTORE;
22362236
} else {
2237-
srcfn = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
2237+
srcfn = part_settings->Backup_Folder + "/" + Backup_FileName;
22382238
Remain = TWFunc::Get_File_Size(srcfn);
22392239
}
22402240
}
@@ -2315,7 +2315,7 @@ bool TWPartition::Backup_Dump_Image(PartitionSettings *part_settings) {
23152315
part_settings->progress->SetPartitionSize(Backup_Size);
23162316

23172317
Backup_FileName = Backup_Name + "." + Current_File_System + ".win";
2318-
Full_FileName = part_settings->Full_Backup_Path + "/" + Backup_FileName;
2318+
Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
23192319

23202320
Command = "dump_image " + MTD_Name + " '" + Full_FileName + "'";
23212321

@@ -2335,7 +2335,7 @@ bool TWPartition::Backup_Dump_Image(PartitionSettings *part_settings) {
23352335

23362336
unsigned long long TWPartition::Get_Restore_Size(PartitionSettings *part_settings) {
23372337
if (!part_settings->adbbackup) {
2338-
InfoManager restore_info(part_settings->Restore_Name + "/" + Backup_Name + ".info");
2338+
InfoManager restore_info(part_settings->Backup_Folder + "/" + Backup_Name + ".info");
23392339
if (restore_info.LoadValues() == 0) {
23402340
if (restore_info.GetValue("backup_size", Restore_Size) == 0) {
23412341
LOGINFO("Read info file, restore size is %llu\n", Restore_Size);
@@ -2346,7 +2346,7 @@ unsigned long long TWPartition::Get_Restore_Size(PartitionSettings *part_setting
23462346

23472347
string Full_FileName, Restore_File_System = Get_Restore_File_System(part_settings);
23482348

2349-
Full_FileName = part_settings->Restore_Name + "/" + Backup_FileName;
2349+
Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
23502350
if (Is_Image(Restore_File_System)) {
23512351
Restore_Size = TWFunc::Get_File_Size(Full_FileName);
23522352
return Restore_Size;
@@ -2363,7 +2363,7 @@ unsigned long long TWPartition::Get_Restore_Size(PartitionSettings *part_setting
23632363
tar.setpassword(Password);
23642364
#endif
23652365
tar.partition_name = Backup_Name;
2366-
tar.backup_folder = part_settings->Restore_Name;
2366+
tar.backup_folder = part_settings->Backup_Folder;
23672367
tar.part_settings = part_settings;
23682368
Restore_Size = tar.get_size();
23692369
return Restore_Size;
@@ -2395,7 +2395,7 @@ bool TWPartition::Restore_Tar(PartitionSettings *part_settings) {
23952395
if (!ReMount_RW(true))
23962396
return false;
23972397

2398-
Full_FileName = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
2398+
Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
23992399
twrpTar tar;
24002400
tar.part_settings = part_settings;
24012401
tar.setdir(Backup_Path);
@@ -2448,7 +2448,7 @@ bool TWPartition::Restore_Image(PartitionSettings *part_settings) {
24482448
if (part_settings->adbbackup)
24492449
Full_FileName = TW_ADB_RESTORE;
24502450
else
2451-
Full_FileName = part_settings->Full_Backup_Path + part_settings->Backup_FileName;
2451+
Full_FileName = part_settings->Backup_Folder + Backup_FileName;
24522452

24532453
if (Restore_File_System == "emmc") {
24542454
if (!part_settings->adbbackup)
@@ -2607,9 +2607,12 @@ uint64_t TWPartition::Get_Max_FileSize() {
26072607
bool TWPartition::Flash_Image(PartitionSettings *part_settings) {
26082608
string Restore_File_System, full_filename;
26092609

2610-
full_filename = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
2610+
if (part_settings->Part != NULL)
2611+
full_filename = part_settings->Backup_Folder + "/" + Backup_FileName;
2612+
else
2613+
full_filename = part_settings->Backup_Folder; // Flash image action from GUI
26112614

2612-
LOGINFO("Image filename is: %s\n", part_settings->Backup_FileName.c_str());
2615+
LOGINFO("Image filename is: %s\n", Backup_FileName.c_str());
26132616

26142617
if (Backup_Method == BM_FILES) {
26152618
LOGERR("Cannot flash images to file systems\n");
@@ -2625,7 +2628,7 @@ bool TWPartition::Flash_Image(PartitionSettings *part_settings) {
26252628
unsigned long long image_size = TWFunc::Get_File_Size(full_filename);
26262629
if (image_size > Size) {
26272630
LOGINFO("Size (%llu bytes) of image '%s' is larger than target device '%s' (%llu bytes)\n",
2628-
image_size, part_settings->Backup_FileName.c_str(), Actual_Block_Device.c_str(), Size);
2631+
image_size, Backup_FileName.c_str(), Actual_Block_Device.c_str(), Size);
26292632
gui_err("img_size_err=Size of image is larger than target device");
26302633
return false;
26312634
}

partitionmanager.cpp

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -482,9 +482,11 @@ int TWPartitionManager::Check_Backup_Name(bool Display_Error) {
482482

483483
bool TWPartitionManager::Make_MD5(PartitionSettings *part_settings)
484484
{
485-
string command;
486-
string Full_File = part_settings->Full_Backup_Path + part_settings->Backup_FileName;
487-
string result;
485+
string command, result;
486+
487+
if (part_settings->Part == NULL)
488+
return false;
489+
string Full_File = part_settings->Backup_Folder + part_settings->Part->Backup_FileName;
488490
twrpDigest md5sum;
489491

490492
if (!part_settings->generate_md5)
@@ -548,7 +550,6 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
548550
TWFunc::SetPerformanceMode(true);
549551
time(&start);
550552

551-
part_settings->Backup_FileName = part_settings->Part->Backup_Name + "." + part_settings->Part->Current_File_System + ".win";
552553
if (part_settings->Part->Backup(part_settings, &tar_fork_pid)) {
553554
bool md5Success = false;
554555
if (part_settings->adbbackup) {
@@ -563,9 +564,8 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
563564
TWPartition *parentPart = part_settings->Part;
564565

565566
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
566-
part_settings->Part = *subpart;
567567
if ((*subpart)->Can_Be_Backed_Up && (*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
568-
part_settings->Backup_FileName = part_settings->Part->Backup_Name + "." + part_settings->Part->Current_File_System + ".win";
568+
part_settings->Part = *subpart;
569569
if (!(*subpart)->Backup(part_settings, &tar_fork_pid)) {
570570
TWFunc::SetPerformanceMode(false);
571571
Clean_Backup_Folder(part_settings->Backup_Folder);
@@ -705,18 +705,18 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
705705
part_settings.generate_md5 = false;
706706

707707
DataManager::GetValue(TW_BACKUPS_FOLDER_VAR, part_settings.Backup_Folder);
708-
DataManager::GetValue(TW_BACKUP_NAME, part_settings.Backup_Name);
709-
if (part_settings.Backup_Name == gui_lookup("curr_date", "(Current Date)")) {
710-
part_settings.Backup_Name = TWFunc::Get_Current_Date();
711-
} else if (part_settings.Backup_Name == gui_lookup("auto_generate", "(Auto Generate)") || part_settings.Backup_Name == "0" || part_settings.Backup_Name.empty()) {
708+
DataManager::GetValue(TW_BACKUP_NAME, Backup_Name);
709+
if (Backup_Name == gui_lookup("curr_date", "(Current Date)")) {
710+
Backup_Name = TWFunc::Get_Current_Date();
711+
} else if (Backup_Name == gui_lookup("auto_generate", "(Auto Generate)") || Backup_Name == "0" || Backup_Name.empty()) {
712712
TWFunc::Auto_Generate_Backup_Name();
713-
DataManager::GetValue(TW_BACKUP_NAME, part_settings.Backup_Name);
713+
DataManager::GetValue(TW_BACKUP_NAME, Backup_Name);
714714
}
715715

716-
LOGINFO("Backup Name is: '%s'\n", part_settings.Backup_Name.c_str());
717-
part_settings.Full_Backup_Path = part_settings.Backup_Folder + "/" + part_settings.Backup_Name + "/";
716+
LOGINFO("Backup Name is: '%s'\n", Backup_Name.c_str());
717+
part_settings.Backup_Folder = part_settings.Backup_Folder + "/" + Backup_Name + "/";
718718

719-
LOGINFO("Full_Backup_Path is: '%s'\n", part_settings.Full_Backup_Path.c_str());
719+
LOGINFO("Full_Backup_Path is: '%s'\n", part_settings.Backup_Folder.c_str());
720720

721721
LOGINFO("Calculating backup details...\n");
722722
DataManager::GetValue("tw_backup_list", Backup_List);
@@ -792,8 +792,8 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
792792
part_settings.file_bytes_remaining = part_settings.file_bytes;
793793

794794
gui_msg("backup_started=[BACKUP STARTED]");
795-
gui_msg(Msg("backup_folder= * Backup Folder: {1}")(part_settings.Full_Backup_Path));
796-
if (!TWFunc::Recursive_Mkdir(part_settings.Full_Backup_Path)) {
795+
gui_msg(Msg("backup_folder= * Backup Folder: {1}")(part_settings.Backup_Folder));
796+
if (!TWFunc::Recursive_Mkdir(part_settings.Backup_Folder)) {
797797
gui_err("fail_backup_folder=Failed to make backup folder.");
798798
return false;
799799
}
@@ -836,7 +836,7 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
836836

837837
uint64_t actual_backup_size;
838838
if (!adbbackup)
839-
actual_backup_size = du.Get_Folder_Size(part_settings.Full_Backup_Path);
839+
actual_backup_size = du.Get_Folder_Size(part_settings.Backup_Folder);
840840
else
841841
actual_backup_size = part_settings.file_bytes + part_settings.img_bytes;
842842
actual_backup_size /= (1024LLU * 1024LLU);
@@ -864,7 +864,7 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
864864
Update_System_Details();
865865
UnMount_Main_Partitions();
866866
gui_msg(Msg(msg::kHighlight, "backup_completed=[BACKUP COMPLETED IN {1} SECONDS]")(total_time)); // the end
867-
string backup_log = part_settings.Full_Backup_Path + "recovery.log";
867+
string backup_log = part_settings.Backup_Folder + "recovery.log";
868868
TWFunc::copy_file("/tmp/recovery.log", backup_log, 0644);
869869
tw_set_default_metadata(backup_log.c_str());
870870

@@ -898,7 +898,6 @@ bool TWPartitionManager::Restore_Partition(PartitionSettings *part_settings) {
898898
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
899899
part_settings->Part = *subpart;
900900
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
901-
part_settings->Backup_FileName = (*subpart)->Backup_Name + "." + (*subpart)->Current_File_System + ".win";
902901
part_settings->Part = (*subpart);
903902
if (!(*subpart)->Restore(part_settings)) {
904903
TWFunc::SetPerformanceMode(false);
@@ -924,7 +923,7 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
924923
string Restore_List, restore_path;
925924
size_t start_pos = 0, end_pos;
926925

927-
part_settings.Restore_Name = Restore_Name;
926+
part_settings.Backup_Folder = Restore_Name;
928927
part_settings.Part = NULL;
929928
part_settings.partition_count = 0;
930929
part_settings.total_restore_size = 0;
@@ -954,7 +953,6 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
954953
restore_path = Restore_List.substr(start_pos, end_pos - start_pos);
955954
part_settings.Part = Find_Partition_By_Path(restore_path);
956955
if (part_settings.Part != NULL) {
957-
part_settings.Backup_FileName = part_settings.Part->Backup_Name + "." + part_settings.Part->Current_File_System + ".win";
958956
if (part_settings.Part->Mount_Read_Only) {
959957
gui_msg(Msg(msg::kError, "restore_read_only=Cannot restore {1} -- mounted read only.")(part_settings.Part->Backup_Display_Name));
960958
return false;
@@ -969,7 +967,6 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
969967
std::vector<TWPartition*>::iterator subpart;
970968

971969
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
972-
part_settings.Backup_FileName = (*subpart)->Backup_Name + "." + (*subpart)->Current_File_System + ".win";
973970
part_settings.Part = *subpart;
974971
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
975972
if (check_md5 > 0 && !(*subpart)->Check_MD5(&part_settings))
@@ -1006,8 +1003,6 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
10061003
part_settings.Part = Find_Partition_By_Path(restore_path);
10071004
if (part_settings.Part != NULL) {
10081005
part_settings.partition_count++;
1009-
part_settings.Backup_FileName = part_settings.Part->Backup_Name + "." + part_settings.Part->Current_File_System + ".win";
1010-
part_settings.Full_Backup_Path = part_settings.Backup_Folder + "/" + part_settings.Backup_FileName + "/";
10111006
if (!Restore_Partition(&part_settings))
10121007
return false;
10131008
} else {
@@ -2259,7 +2254,7 @@ bool TWPartitionManager::Flash_Image(PartitionSettings *part_settings) {
22592254
string Flash_List, flash_path, full_filename;
22602255
size_t start_pos = 0, end_pos = 0;
22612256

2262-
full_filename = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
2257+
full_filename = part_settings->Backup_Folder;
22632258

22642259
gui_msg("image_flash_start=[IMAGE FLASH STARTED]");
22652260
gui_msg(Msg("img_to_flash=Image to flash: '{1}'")(full_filename));

partitions.hpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,7 @@ class TWPartition;
4444

4545
struct PartitionSettings { // Settings for backup session
4646
TWPartition* Part; // Partition to pass to the partition backup loop
47-
std::string Backup_Folder; // Backup folder to put backup into
48-
std::string Full_Backup_Path; // Path to the current backup storage setting
49-
std::string Backup_Name; // Name of partition
50-
std::string Restore_Name; // Path to restore folder
51-
std::string Backup_FileName; // Name of the file to restore
47+
std::string Backup_Folder; // Path to restore folder
5248
bool adbbackup; // tell the system we are backing up over adb
5349
bool adb_compression; // 0 == uncompressed, 1 == compressed
5450
bool generate_md5; // tell system to create md5 for partitions

0 commit comments

Comments
 (0)