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
diff --git a/partition.cpp b/partition.cpp
index 6edc368..d34b465 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -1621,7 +1621,7 @@
 	sync();
 
 	memset(split_filename, 0, sizeof(split_filename));
-	Full_Filename = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
+	Full_Filename = part_settings->Backup_Folder + "/" + Backup_FileName;
 	if (!TWFunc::Path_Exists(Full_Filename)) {
 		// This is a split archive, we presume
 		sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
@@ -1662,7 +1662,7 @@
 
 bool TWPartition::Restore(PartitionSettings *part_settings) {
 	TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, gui_parse_text("{@restoring_hdr}"));
-	LOGINFO("Restore filename is: %s/%s\n", part_settings->Restore_Name.c_str(), part_settings->Backup_FileName.c_str());
+	LOGINFO("Restore filename is: %s%s\n", part_settings->Backup_Folder.c_str(), Backup_FileName.c_str());
 
 	string Restore_File_System = Get_Restore_File_System(part_settings);
 
@@ -1680,12 +1680,12 @@
 	string Restore_File_System;
 
 	// Parse backup filename to extract the file system before wiping
-	first_period = part_settings->Backup_FileName.find(".");
+	first_period = Backup_FileName.find(".");
 	if (first_period == string::npos) {
 		LOGERR("Unable to find file system (first period).\n");
 		return string();
 	}
-	Restore_File_System = part_settings->Backup_FileName.substr(first_period + 1, part_settings->Backup_FileName.size() - first_period - 1);
+	Restore_File_System = Backup_FileName.substr(first_period + 1, Backup_FileName.size() - first_period - 1);
 	second_period = Restore_File_System.find(".");
 	if (second_period == string::npos) {
 		LOGERR("Unable to find file system (second period).\n");
@@ -2167,14 +2167,14 @@
 #endif
 
 	Backup_FileName = Backup_Name + "." + Current_File_System + ".win";
-	Full_FileName = part_settings->Full_Backup_Path + Backup_FileName;
+	Full_FileName = part_settings->Backup_Folder + Backup_FileName;
 	tar.has_data_media = Has_Data_Media;
 	tar.part_settings = part_settings;
 	tar.setdir(Backup_Path);
 	tar.setfn(Full_FileName);
 	tar.setsize(Backup_Size);
 	tar.partition_name = Backup_Name;
-	tar.backup_folder = part_settings->Full_Backup_Path;
+	tar.backup_folder = part_settings->Backup_Folder;
 	if (tar.createTarFork(tar_fork_pid) != 0)
 		return false;
 	return true;
@@ -2191,10 +2191,10 @@
 
 	if (part_settings->adbbackup) {
 		Full_FileName = TW_ADB_BACKUP;
-		adb_file_name  = part_settings->Full_Backup_Path + "/" + Backup_FileName;
+		adb_file_name  = part_settings->Backup_Folder + "/" + Backup_FileName;
 	}
 	else
-		Full_FileName = part_settings->Full_Backup_Path + "/" + Backup_FileName;
+		Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
 
 	part_settings->total_restore_size = Backup_Size;
 
@@ -2227,14 +2227,14 @@
 		if (part_settings->adbbackup)
 			destfn = TW_ADB_BACKUP;
 		else
-			destfn = part_settings->Full_Backup_Path + part_settings->Backup_FileName;
+			destfn = part_settings->Backup_Folder + Backup_FileName;
 	}
 	else {
 		destfn = Actual_Block_Device;
 		if (part_settings->adbbackup) {
 			srcfn = TW_ADB_RESTORE;
 		} else {
-			srcfn = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
+			srcfn = part_settings->Backup_Folder + "/" + Backup_FileName;
 			Remain = TWFunc::Get_File_Size(srcfn);
 		}
 	}
@@ -2315,7 +2315,7 @@
 		part_settings->progress->SetPartitionSize(Backup_Size);
 
 	Backup_FileName = Backup_Name + "." + Current_File_System + ".win";
-	Full_FileName = part_settings->Full_Backup_Path + "/" + Backup_FileName;
+	Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
 
 	Command = "dump_image " + MTD_Name + " '" + Full_FileName + "'";
 
@@ -2335,7 +2335,7 @@
 
 unsigned long long TWPartition::Get_Restore_Size(PartitionSettings *part_settings) {
 	if (!part_settings->adbbackup) {
-		InfoManager restore_info(part_settings->Restore_Name + "/" + Backup_Name + ".info");
+		InfoManager restore_info(part_settings->Backup_Folder + "/" + Backup_Name + ".info");
 		if (restore_info.LoadValues() == 0) {
 			if (restore_info.GetValue("backup_size", Restore_Size) == 0) {
 				LOGINFO("Read info file, restore size is %llu\n", Restore_Size);
@@ -2346,7 +2346,7 @@
 
 	string Full_FileName, Restore_File_System = Get_Restore_File_System(part_settings);
 
-	Full_FileName = part_settings->Restore_Name + "/" + Backup_FileName;
+	Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
 	if (Is_Image(Restore_File_System)) {
 		Restore_Size = TWFunc::Get_File_Size(Full_FileName);
 		return Restore_Size;
@@ -2363,7 +2363,7 @@
 		tar.setpassword(Password);
 #endif
 	tar.partition_name = Backup_Name;
-	tar.backup_folder = part_settings->Restore_Name;
+	tar.backup_folder = part_settings->Backup_Folder;
 	tar.part_settings = part_settings;
 	Restore_Size = tar.get_size();
 	return Restore_Size;
@@ -2395,7 +2395,7 @@
 	if (!ReMount_RW(true))
 		return false;
 
-	Full_FileName = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
+	Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
 	twrpTar tar;
 	tar.part_settings = part_settings;
 	tar.setdir(Backup_Path);
@@ -2448,7 +2448,7 @@
 	if (part_settings->adbbackup)
 		Full_FileName = TW_ADB_RESTORE;
 	else
-		Full_FileName = part_settings->Full_Backup_Path + part_settings->Backup_FileName;
+		Full_FileName = part_settings->Backup_Folder + Backup_FileName;
 
 	if (Restore_File_System == "emmc") {
 		if (!part_settings->adbbackup)
@@ -2607,9 +2607,12 @@
 bool TWPartition::Flash_Image(PartitionSettings *part_settings) {
 	string Restore_File_System, full_filename;
 
-	full_filename = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
+	if (part_settings->Part != NULL)
+		full_filename = part_settings->Backup_Folder + "/" + Backup_FileName;
+	else
+		full_filename = part_settings->Backup_Folder; // Flash image action from GUI
 
-	LOGINFO("Image filename is: %s\n", part_settings->Backup_FileName.c_str());
+	LOGINFO("Image filename is: %s\n", Backup_FileName.c_str());
 
 	if (Backup_Method == BM_FILES) {
 		LOGERR("Cannot flash images to file systems\n");
@@ -2625,7 +2628,7 @@
 		unsigned long long image_size = TWFunc::Get_File_Size(full_filename);
 		if (image_size > Size) {
 			LOGINFO("Size (%llu bytes) of image '%s' is larger than target device '%s' (%llu bytes)\n",
-				image_size, part_settings->Backup_FileName.c_str(), Actual_Block_Device.c_str(), Size);
+				image_size, Backup_FileName.c_str(), Actual_Block_Device.c_str(), Size);
 			gui_err("img_size_err=Size of image is larger than target device");
 			return false;
 		}