From 2252d24c964df89189143e8d09626e9455e0f580 Mon Sep 17 00:00:00 2001 From: that Date: Fri, 3 Apr 2015 22:33:04 +0200 Subject: twrpTar: fix segfault after encrypted backups also use unsigned int for core_count instead of unsigned long long. I'll change it back when 4-billion-core devices are common. PS2 - cast return value via intptr_t (may be important for 64 bit platforms) - output errors from TWFunc::Wait_For_Child to console Change-Id: I04158daa0b64e44d68e179d626a83d81cf5d49f7 --- twrpTar.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'twrpTar.cpp') diff --git a/twrpTar.cpp b/twrpTar.cpp index a8e75b3cb..bbe512598 100644 --- a/twrpTar.cpp +++ b/twrpTar.cpp @@ -118,8 +118,8 @@ int twrpTar::createTarFork(const unsigned long long *overall_size, const unsigne LOGINFO("Using encryption\n"); DIR* d; struct dirent* de; - unsigned long long regular_size = 0, encrypt_size = 0, target_size = 0, core_count = 1, total_size; - unsigned enc_thread_id = 1, regular_thread_id = 0, i, start_thread_id = 1; + unsigned long long regular_size = 0, encrypt_size = 0, target_size = 0, total_size; + unsigned enc_thread_id = 1, regular_thread_id = 0, i, start_thread_id = 1, core_count = 1; int item_len, ret, thread_error = 0; std::vector RegularList; std::vector EncryptList; @@ -134,7 +134,7 @@ int twrpTar::createTarFork(const unsigned long long *overall_size, const unsigne core_count = sysconf(_SC_NPROCESSORS_CONF); if (core_count > 8) core_count = 8; - LOGINFO(" Core Count : %llu\n", core_count); + LOGINFO(" Core Count : %u\n", core_count); Archive_Current_Size = 0; d = opendir(tardir.c_str()); @@ -223,7 +223,7 @@ int twrpTar::createTarFork(const unsigned long long *overall_size, const unsigne } closedir(d); if (enc_thread_id != core_count) { - LOGERR("Error dividing up threads for encryption, %i threads for %i cores!\n", enc_thread_id, core_count); + LOGERR("Error dividing up threads for encryption, %u threads for %u cores!\n", enc_thread_id, core_count); if (enc_thread_id > core_count) { close(progress_pipe[1]); _exit(-1); @@ -311,7 +311,7 @@ int twrpTar::createTarFork(const unsigned long long *overall_size, const unsigne _exit(-1); } else { LOGINFO("Joined thread %i.\n", i); - ret = *((int *)thread_return); + ret = (int)(intptr_t)thread_return; if (ret != 0) { thread_error = 1; LOGERR("Thread %i returned an error %i.\n", i, ret); @@ -545,7 +545,7 @@ int twrpTar::extractTarFork(const unsigned long long *overall_size, unsigned lon _exit(-1); } else { LOGINFO("Joined thread %i.\n", i); - ret = *((int *)thread_return); + ret = (int)(intptr_t)thread_return; if (ret != 0) { thread_error = 1; LOGERR("Thread %i returned an error %i.\n", i, ret); -- cgit v1.2.3