summaryrefslogtreecommitdiffstats
path: root/partitionmanager.cpp
diff options
context:
space:
mode:
authorbigbiff bigbiff <bigbiff@teamw.in>2016-08-19 23:43:45 +0200
committerEthan Yonker <dees_troy@teamw.in>2017-06-17 14:05:45 +0200
commit56cf56465857e79e814b1e2d50f13e176170fcb3 (patch)
tree33b1ed63aa4e51f6e49fda5bd6ccb204e1e8fdab /partitionmanager.cpp
parentMerge "Fix minui issues for some build trees" into android-7.1 (diff)
downloadandroid_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.tar
android_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.tar.gz
android_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.tar.bz2
android_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.tar.lz
android_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.tar.xz
android_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.tar.zst
android_bootable_recovery-56cf56465857e79e814b1e2d50f13e176170fcb3.zip
Diffstat (limited to 'partitionmanager.cpp')
-rw-r--r--partitionmanager.cpp125
1 files changed, 42 insertions, 83 deletions
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index f53c2ae6e..0b00eb0ac 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -39,12 +39,12 @@
#include "data.hpp"
#include "twrp-functions.hpp"
#include "fixContexts.hpp"
-#include "twrpDigest.hpp"
#include "exclude.hpp"
#include "set_metadata.h"
#include "tw_atomic.hpp"
#include "gui/gui.hpp"
#include "progresstracking.hpp"
+#include "twrpDigestDriver.hpp"
#include "adbbu/libtwadbbu.hpp"
#ifdef TW_HAS_MTP
@@ -515,62 +515,6 @@ int TWPartitionManager::Check_Backup_Name(bool Display_Error) {
return 0;
}
-bool TWPartitionManager::Make_MD5(PartitionSettings *part_settings)
-{
- string command, result;
-
- if (part_settings->Part == NULL)
- return false;
- string Full_File = part_settings->Backup_Folder + "/" + part_settings->Part->Backup_FileName;
- twrpDigest md5sum;
-
- if (!part_settings->generate_md5)
- return true;
-
- TWFunc::GUI_Operation_Text(TW_GENERATE_MD5_TEXT, gui_parse_text("{@generating_md51}"));
- gui_msg("generating_md52= * Generating md5...");
- if (TWFunc::Path_Exists(Full_File)) {
- md5sum.setfn(Full_File);
- if (md5sum.computeMD5() == 0)
- if (md5sum.write_md5digest() == 0)
- gui_msg("md5_created= * MD5 Created.");
- else
- return -1;
- else
- gui_err("md5_error= * MD5 Error!");
- } else {
- char filename[512];
- int index = 0;
- string strfn;
- sprintf(filename, "%s%03i", Full_File.c_str(), index);
- strfn = filename;
- while (index < 1000) {
- md5sum.setfn(filename);
- if (TWFunc::Path_Exists(filename)) {
- if (md5sum.computeMD5() == 0) {
- if (md5sum.write_md5digest() != 0)
- {
- gui_err("md5_error= * MD5 Error!");
- return false;
- }
- } else {
- gui_err("md5_compute_error= * Error computing MD5.");
- return false;
- }
- }
- index++;
- sprintf(filename, "%s%03i", Full_File.c_str(), index);
- strfn = filename;
- }
- if (index == 0) {
- LOGERR("Backup file: '%s' not found!\n", filename);
- return false;
- }
- gui_msg("md5_created= * MD5 Created.");
- }
- return true;
-}
-
bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
time_t start, stop;
int use_compression;
@@ -585,11 +529,15 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
time(&start);
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);
+ bool digestSuccess = false;
+ string Full_Filename = part_settings->Backup_Folder + "/" + part_settings->Part->Backup_FileName;
+ if (part_settings->generate_digest) {
+
+ if (part_settings->adbbackup)
+ digestSuccess = true;
+ else
+ digestSuccess = twrpDigestDriver::Make_Digest(Full_Filename);
+ }
if (part_settings->Part->Has_SubPartition) {
std::vector<TWPartition*>::iterator subpart;
@@ -607,8 +555,8 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
}
sync();
sync();
- if (!part_settings->adbbackup) {
- if (!Make_MD5(part_settings)) {
+ if (!part_settings->adbbackup && part_settings->generate_digest) {
+ if (!twrpDigestDriver::Make_Digest(Full_Filename)) {
TWFunc::SetPerformanceMode(false);
return false;
}
@@ -616,6 +564,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);
@@ -628,7 +577,7 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) {
}
TWFunc::SetPerformanceMode(false);
- return md5Success;
+ return digestSuccess;
} else {
Clean_Backup_Folder(part_settings->Backup_Folder);
TWFunc::copy_file("/tmp/recovery.log", backup_log, 0644);
@@ -643,6 +592,13 @@ void TWPartitionManager::Clean_Backup_Folder(string Backup_Folder) {
DIR *d = opendir(Backup_Folder.c_str());
struct dirent *p;
int r;
+ vector<string> ext;
+
+ //extensions we should delete when cleaning
+ ext.push_back("win");
+ ext.push_back("md5");
+ ext.push_back("sha2");
+ ext.push_back("info");
gui_msg("backup_clean=Backup Failed. Cleaning Backup Folder.");
@@ -658,10 +614,11 @@ void TWPartitionManager::Clean_Backup_Folder(string Backup_Folder) {
string path = Backup_Folder + "/" + p->d_name;
size_t dot = path.find_last_of(".") + 1;
- if (path.substr(dot) == "win" || path.substr(dot) == "md5" || path.substr(dot) == "info") {
- r = unlink(path.c_str());
- if (r != 0) {
- LOGINFO("Unable to unlink '%s: %s'\n", path.c_str(), strerror(errno));
+ for (vector<string>::const_iterator i = ext.begin(); i != ext.end(); ++i) {
+ if (path.substr(dot) == *i) {
+ r = unlink(path.c_str());
+ if (r != 0)
+ LOGINFO("Unable to unlink '%s: %s'\n", path.c_str(), strerror(errno));
}
}
}
@@ -697,7 +654,7 @@ int TWPartitionManager::Cancel_Backup() {
int TWPartitionManager::Run_Backup(bool adbbackup) {
PartitionSettings part_settings;
- int partition_count = 0, disable_free_space_check = 0, do_md5 = 0;
+ int partition_count = 0, disable_free_space_check = 0, skip_digest = 0;
int gui_adb_backup;
string Backup_Name, Backup_List, backup_path;
unsigned long long total_bytes = 0, free_space = 0;
@@ -730,11 +687,11 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
if (!Mount_Current_Storage(true))
return false;
- DataManager::GetValue(TW_SKIP_MD5_GENERATE_VAR, do_md5);
- if (do_md5 == 0)
- part_settings.generate_md5 = true;
+ DataManager::GetValue(TW_SKIP_DIGEST_GENERATE_VAR, skip_digest);
+ if (skip_digest == 0)
+ part_settings.generate_digest = true;
else
- part_settings.generate_md5 = false;
+ part_settings.generate_digest = false;
DataManager::GetValue(TW_BACKUPS_FOLDER_VAR, part_settings.Backup_Folder);
DataManager::GetValue(TW_BACKUP_NAME, Backup_Name);
@@ -951,7 +908,7 @@ bool TWPartitionManager::Restore_Partition(PartitionSettings *part_settings) {
int TWPartitionManager::Run_Restore(const string& Restore_Name) {
PartitionSettings part_settings;
- int check_md5;
+ int check_digest;
time_t rStart, rStop;
time(&rStart);
@@ -971,13 +928,13 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
if (!Mount_Current_Storage(true))
return false;
- DataManager::GetValue(TW_SKIP_MD5_CHECK_VAR, check_md5);
- if (check_md5 > 0) {
- // Check MD5 files first before restoring to ensure that all of them match before starting a restore
- TWFunc::GUI_Operation_Text(TW_VERIFY_MD5_TEXT, gui_parse_text("{@verifying_md5}"));
- gui_msg("verifying_md5=Verifying MD5");
+ DataManager::GetValue(TW_SKIP_DIGEST_CHECK_VAR, check_digest);
+ if (check_digest > 0) {
+ // Check Digest files first before restoring to ensure that all of them match before starting a restore
+ TWFunc::GUI_Operation_Text(TW_VERIFY_DIGEST_TEXT, gui_parse_text("{@verifying_digest}"));
+ gui_msg("verifying_digest=Verifying Digest");
} else {
- gui_msg("skip_md5=Skipping MD5 check based on user setting.");
+ gui_msg("skip_digest=Skipping Digest check based on user setting.");
}
gui_msg("calc_restore=Calculating restore details...");
DataManager::GetValue("tw_restore_selected", Restore_List);
@@ -993,7 +950,9 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
return false;
}
- if (check_md5 > 0 && !part_settings.Part->Check_MD5(&part_settings))
+ string Full_Filename = part_settings.Backup_Folder + "/" + part_settings.Part->Backup_FileName;
+
+ if (check_digest > 0 && !twrpDigestDriver::Check_Digest(Full_Filename))
return false;
part_settings.partition_count++;
part_settings.total_restore_size += part_settings.Part->Get_Restore_Size(&part_settings);
@@ -1004,7 +963,7 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
part_settings.Part = *subpart;
if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
- if (check_md5 > 0 && !(*subpart)->Check_MD5(&part_settings))
+ if (check_digest > 0 && !twrpDigestDriver::Check_Digest(Full_Filename))
return false;
part_settings.total_restore_size += (*subpart)->Get_Restore_Size(&part_settings);
}