MD5 checking: fix issues introduced with adb backup patchset

This patchset will fix issues with creating and checking
md5 checksums with single partitions and subpartitions.

Change-Id: Iddfaf46412e95635af958094726cf9e3eb5a4cc8
This commit is contained in:
bigbiff bigbiff
2016-08-30 20:48:53 -04:00
parent 4bf259fab7
commit 8fd4b096c4
3 changed files with 28 additions and 19 deletions
+3 -3
View File
@@ -1612,7 +1612,7 @@ bool TWPartition::Backup(PartitionSettings *part_settings, pid_t *tar_fork_pid)
return false;
}
bool TWPartition::Check_MD5(string restore_folder) {
bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
string Full_Filename, md5file;
char split_filename[512];
int index = 0;
@@ -1621,7 +1621,7 @@ bool TWPartition::Check_MD5(string restore_folder) {
sync();
memset(split_filename, 0, sizeof(split_filename));
Full_Filename = restore_folder + "/" + Backup_FileName;
Full_Filename = part_settings->Restore_Name + "/" + part_settings->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);
@@ -1647,7 +1647,7 @@ bool TWPartition::Check_MD5(string restore_folder) {
// Single file archive
md5file = Full_Filename + ".md5";
if (!TWFunc::Path_Exists(md5file)) {
gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(split_filename));
gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(md5file));
return false;
}
md5sum.setfn(Full_Filename);
+22 -13
View File
@@ -551,11 +551,21 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
part_settings->Backup_FileName = part_settings->Part->Backup_Name + "." + part_settings->Part->Current_File_System + ".win";
if (part_settings->Part->Backup(part_settings, &tar_fork_pid)) {
bool md5Success = false;
if (part_settings->adbbackup) {
md5Success = true;
}
else
md5Success = Make_MD5(part_settings);
TWFunc::SetPerformanceMode(false);
if (part_settings->Part->Has_SubPartition) {
std::vector<TWPartition*>::iterator subpart;
TWPartition *parentPart = part_settings->Part;
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
if ((*subpart)->Can_Be_Backed_Up && (*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == part_settings->Part->Mount_Point) {
part_settings->Part = *subpart;
if ((*subpart)->Can_Be_Backed_Up && (*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
part_settings->Backup_FileName = part_settings->Part->Backup_Name + "." + part_settings->Part->Current_File_System + ".win";
if (!(*subpart)->Backup(part_settings, &tar_fork_pid)) {
TWFunc::SetPerformanceMode(false);
Clean_Backup_Folder(part_settings->Backup_Folder);
@@ -577,6 +587,7 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
time(&stop);
int backup_time = (int) difftime(stop, start);
LOGINFO("Partition Backup time: %d\n", backup_time);
if (part_settings->Part->Backup_Method == BM_FILES) {
part_settings->file_time += backup_time;
} else {
@@ -584,13 +595,6 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
}
if (part_settings->adbbackup) {
md5Success = true;
}
else
md5Success = Make_MD5(part_settings);
TWFunc::SetPerformanceMode(false);
return md5Success;
} else {
Clean_Backup_Folder(part_settings->Backup_Folder);
@@ -889,10 +893,12 @@ bool TWPartitionManager::Restore_Partition(PartitionSettings *part_settings) {
}
if (part_settings->Part->Has_SubPartition) {
std::vector<TWPartition*>::iterator subpart;
TWPartition *parentPart = part_settings->Part;
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == part_settings->Part->Mount_Point) {
part_settings->Part = *subpart;
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
part_settings->Part = (*subpart);
if (!(*subpart)->Restore(part_settings)) {
TWFunc::SetPerformanceMode(false);
return false;
@@ -953,16 +959,19 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
return false;
}
if (check_md5 > 0 && !part_settings.Part->Check_MD5(Restore_Name))
if (check_md5 > 0 && !part_settings.Part->Check_MD5(&part_settings))
return false;
part_settings.partition_count++;
part_settings.total_restore_size += part_settings.Part->Get_Restore_Size(&part_settings);
if (part_settings.Part->Has_SubPartition) {
TWPartition *parentPart = part_settings.Part;
std::vector<TWPartition*>::iterator subpart;
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == part_settings.Part->Mount_Point) {
if (check_md5 > 0 && !(*subpart)->Check_MD5(Restore_Name))
part_settings.Backup_FileName = parentPart->Backup_Name + "." + parentPart->Current_File_System + ".win";
part_settings.Part = *subpart;
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
if (check_md5 > 0 && !(*subpart)->Check_MD5(&part_settings))
return false;
part_settings.total_restore_size += (*subpart)->Get_Restore_Size(&part_settings);
}
+3 -3
View File
@@ -60,8 +60,8 @@ struct PartitionSettings {
uint64_t img_bytes; // total image bytes of all emmc partitions
uint64_t file_bytes; // total file bytes of all file based partitions
int partition_count; // Number of partitions to restore
ProgressTracking *progress;
enum PartitionManager_Op PM_Method; //Current operation of backup or restore
ProgressTracking *progress; // Keep track of progress in GUI
enum PartitionManager_Op PM_Method; // Current operation of backup or restore
};
enum Backup_Method_enum {
@@ -94,7 +94,7 @@ public:
bool Can_Resize(); // Checks to see if we have everything needed to be able to resize the current file system
bool Resize(); // Resizes the current file system
bool Backup(PartitionSettings *part_settings, pid_t *tar_fork_pid); // Backs up the partition to the folder specified
bool Check_MD5(string restore_folder); // Checks MD5 of a backup
bool Check_MD5(PartitionSettings *part_settings); // Checks MD5 of a backup
bool Restore(PartitionSettings *part_settings); // Restores the partition using the backup folder provided
unsigned long long Get_Restore_Size(PartitionSettings *part_settings);// Returns the overall restore size of the backup
string Backup_Method_By_Name(); // Returns a string of the backup method for human readable output