From 2673cec07a4740f86438b50cfe1b70b258a9a8c8 Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Tue, 2 Apr 2013 20:22:16 +0000 Subject: Move all AOSP code out of recovery binary Improves license compatibility between GPL and Apache Change-Id: I2b165aa575bb6213af6b07936f99610c113443f0 --- Android.mk | 56 ++++---- adb_install.cpp | 36 +++-- adb_install.h | 4 +- bootloader.cpp | 67 ++++++++- bootloader.h | 3 + common.h | 7 +- crypto/ics/Android.mk | 13 ++ crypto/jb/Android.mk | 14 ++ data.cpp | 97 ++++++++----- data.hpp | 3 + fixPermissions.cpp | 86 ++++++------ gui/Android.mk | 2 +- gui/action.cpp | 128 ++++++++--------- gui/animation.cpp | 3 +- gui/blanktimer.cpp | 5 +- gui/button.cpp | 5 +- gui/checkbox.cpp | 3 +- gui/conditional.cpp | 3 +- gui/console.cpp | 3 +- gui/fileselector.cpp | 6 +- gui/fill.cpp | 5 +- gui/gui.cpp | 48 ++++--- gui/hardwarekeyboard.cpp | 9 +- gui/image.cpp | 3 +- gui/input.cpp | 5 +- gui/keyboard.cpp | 21 ++- gui/listbox.cpp | 4 +- gui/pages.cpp | 53 ++++--- gui/partitionlist.cpp | 10 +- gui/progressbar.cpp | 5 +- gui/resources.cpp | 17 ++- gui/slider.cpp | 7 +- gui/text.cpp | 3 +- install.cpp | 2 +- install.h | 2 + libjpegtwrp/Android.mk | 6 +- minadbd/Android.mk | 9 +- minuitwrp/Android.mk | 18 ++- minuitwrp/events.c | 50 +++---- minuitwrp/graphics.c | 18 +-- minuitwrp/resources.c | 2 +- minzip/Android.mk | 3 +- mtdutils/Android.mk | 15 ++ openrecoveryscript.cpp | 159 ++++++++++----------- partition.cpp | 240 ++++++++++++++++---------------- partitionmanager.cpp | 303 +++++++++++++++++++--------------------- prebuilt/Android.mk | 15 +- tarWrite.c | 4 +- twcommon.h | 19 +++ twinstall.cpp | 349 +++++++++++++---------------------------------- twinstall.h | 24 +--- twrp-functions.cpp | 234 ++++++++++++++----------------- twrp-functions.hpp | 9 +- twrp.cpp | 241 ++++++++++++++++++++++++++++++++ twrpDigest.cpp | 3 +- twrpTar.cpp | 102 +++++++------- variables.h | 1 + verifier.cpp | 108 ++++++++++++++- verifier.h | 8 +- 59 files changed, 1483 insertions(+), 1195 deletions(-) create mode 100644 crypto/ics/Android.mk create mode 100644 crypto/jb/Android.mk create mode 100644 twcommon.h create mode 100644 twrp.cpp diff --git a/Android.mk b/Android.mk index 0419e827f..398eac7ce 100644 --- a/Android.mk +++ b/Android.mk @@ -16,25 +16,16 @@ LOCAL_PATH := $(call my-dir) TARGET_RECOVERY_GUI := true -include $(CLEAR_VARS) LOCAL_SRC_FILES := \ - recovery.cpp \ - twbootloader.cpp \ - install.cpp \ - roots.cpp \ - ui.cpp \ - screen_ui.cpp \ - verifier.cpp \ + twrp.cpp \ fixPermissions.cpp \ twrpTar.cpp \ twrpDigest.cpp \ - adb_install.cpp LOCAL_SRC_FILES += \ data.cpp \ partition.cpp \ partitionmanager.cpp \ - mtdutils/mtdutils.c \ twinstall.cpp \ twrp-functions.cpp \ openrecoveryscript.cpp \ @@ -64,10 +55,8 @@ LOCAL_C_INCLUDES += bionic external/stlport/stlport LOCAL_STATIC_LIBRARIES := LOCAL_SHARED_LIBRARIES := -LOCAL_STATIC_LIBRARIES += libmtdutils libcrecovery -LOCAL_STATIC_LIBRARIES += libminadbd libminzip libunz -LOCAL_STATIC_LIBRARIES += libminuitwrp libpixelflinger_static libpng libjpegtwrp libgui -LOCAL_SHARED_LIBRARIES += libz libc libstlport libcutils libstdc++ libmincrypt libext4_utils libtar libblkid +LOCAL_STATIC_LIBRARIES += libcrecovery libguitwrp +LOCAL_SHARED_LIBRARIES += libz libc libstlport libcutils libstdc++ libext4_utils libtar libblkid libminuitwrp libminadbd libmtdutils libminzip libaosprecovery ifneq ($(wildcard system/core/libsparse/Android.mk),) LOCAL_SHARED_LIBRARIES += libsparse @@ -80,9 +69,9 @@ ifeq ($(TARGET_USERIMAGES_USE_EXT4), true) endif ifeq ($(HAVE_SELINUX), true) - LOCAL_C_INCLUDES += external/libselinux/include - LOCAL_STATIC_LIBRARIES += libselinux - LOCAL_CFLAGS += -DHAVE_SELINUX -g + #LOCAL_C_INCLUDES += external/libselinux/include + #LOCAL_STATIC_LIBRARIES += libselinux + #LOCAL_CFLAGS += -DHAVE_SELINUX -g endif # HAVE_SELINUX # This binary is in the recovery ramdisk, which is otherwise a copy of root. @@ -217,17 +206,16 @@ ifeq ($(TW_INCLUDE_CRYPTO_SAMSUNG), true) LOCAL_LDFLAGS += -ldl LOCAL_STATIC_LIBRARIES += libcrypt_samsung endif - LOCAL_SHARED_LIBRARIES += libcrypto - LOCAL_SRC_FILES += crypto/ics/cryptfs.c - LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include + LOCAL_SHARED_LIBRARIES += libcryptfsics + #LOCAL_SRC_FILES += crypto/ics/cryptfs.c + #LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include endif ifeq ($(TW_INCLUDE_JB_CRYPTO), true) LOCAL_CFLAGS += -DTW_INCLUDE_CRYPTO LOCAL_CFLAGS += -DTW_INCLUDE_JB_CRYPTO - LOCAL_SHARED_LIBRARIES += libcrypto - LOCAL_STATIC_LIBRARIES += libfs_mgrtwrp - LOCAL_SRC_FILES += crypto/jb/cryptfs.c - LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include + LOCAL_SHARED_LIBRARIES += libcryptfsjb + #LOCAL_SRC_FILES += crypto/jb/cryptfs.c + #LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include endif ifeq ($(TW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID), true) LOCAL_CFLAGS += -DTW_USE_MODEL_HARDWARE_ID_FOR_DEVICE_ID @@ -277,6 +265,18 @@ LOCAL_STATIC_LIBRARIES := \ libc include $(BUILD_EXECUTABLE) +include $(CLEAR_VARS) + +LOCAL_MODULE := libaosprecovery +LOCAL_MODULE_TAGS := eng +LOCAL_MODULES_TAGS = optional +LOCAL_CFLAGS = +LOCAL_SRC_FILES = adb_install.cpp bootloader.cpp verifier.cpp +LOCAL_SHARED_LIBRARIES += libc liblog libcutils libmtdutils +LOCAL_STATIC_LIBRARIES += libmincrypt + +include $(BUILD_SHARED_LIBRARY) + commands_recovery_local_path := $(LOCAL_PATH) include $(LOCAL_PATH)/minui/Android.mk \ $(LOCAL_PATH)/minelf/Android.mk \ @@ -291,7 +291,6 @@ include $(LOCAL_PATH)/minui/Android.mk \ include $(commands_recovery_local_path)/libjpegtwrp/Android.mk \ $(commands_recovery_local_path)/injecttwrp/Android.mk \ $(commands_recovery_local_path)/htcdumlock/Android.mk \ - $(commands_recovery_local_path)/minuitwrp/Android.mk \ $(commands_recovery_local_path)/gui/Android.mk \ $(commands_recovery_local_path)/mmcutils/Android.mk \ $(commands_recovery_local_path)/bmlutils/Android.mk \ @@ -305,13 +304,15 @@ include $(commands_recovery_local_path)/libjpegtwrp/Android.mk \ $(commands_recovery_local_path)/crypto/cryptfs/Android.mk \ $(commands_recovery_local_path)/libcrecovery/Android.mk \ $(commands_recovery_local_path)/twmincrypt/Android.mk \ - $(commands_recovery_local_path)/libblkid/Android.mk + $(commands_recovery_local_path)/libblkid/Android.mk \ + $(commands_recovery_local_path)/minuitwrp/Android.mk ifeq ($(TW_INCLUDE_CRYPTO_SAMSUNG), true) include $(commands_recovery_local_path)/crypto/libcrypt_samsung/Android.mk endif ifeq ($(TW_INCLUDE_JB_CRYPTO), true) + include $(commands_recovery_local_path)/crypto/jb/Android.mk include $(commands_recovery_local_path)/crypto/fs_mgr/Android.mk endif ifeq ($(BUILD_ID), GINGERBREAD) @@ -323,5 +324,8 @@ ifneq ($(TW_NO_EXFAT), true) $(commands_recovery_local_path)/fuse/Android.mk \ $(commands_recovery_local_path)/exfat/libexfat/Android.mk endif +ifeq ($(TW_INCLUDE_CRYPTO), true) + include $(commands_recovery_local_path)/crypto/ics/Android.mk +endif commands_recovery_local_path := diff --git a/adb_install.cpp b/adb_install.cpp index f227bc024..c18126d00 100644 --- a/adb_install.cpp +++ b/adb_install.cpp @@ -24,17 +24,13 @@ #include #include #include +#include #include "ui.h" #include "cutils/properties.h" -#include "install.h" -#include "common.h" #include "adb_install.h" extern "C" { #include "minadbd/adb.h" -#include "twinstall.h" -#include "data.h" -int TWinstall_zip(const char* path, int* wipe_cache); } static RecoveryUI* ui = NULL; @@ -47,20 +43,20 @@ set_usb_driver(bool enabled) { It's not a critical error so we're disabling the error messages. ui->Print("failed to open driver control: %s\n", strerror(errno)); */ - LOGI("failed to open driver control: %s\n", strerror(errno)); + printf("failed to open driver control: %s\n", strerror(errno)); return; } if (write(fd, enabled ? "1" : "0", 1) < 0) { /* ui->Print("failed to set driver control: %s\n", strerror(errno)); */ - LOGI("failed to set driver control: %s\n", strerror(errno)); + printf("failed to set driver control: %s\n", strerror(errno)); } if (close(fd) < 0) { /* ui->Print("failed to close driver control: %s\n", strerror(errno)); */ - LOGI("failed to close driver control: %s\n", strerror(errno)); + printf("failed to close driver control: %s\n", strerror(errno)); } } @@ -76,28 +72,29 @@ maybe_restart_adbd() { char value[PROPERTY_VALUE_MAX+1]; int len = property_get("ro.debuggable", value, NULL); if (len == 1 && value[0] == '1') { - ui->Print("Restarting adbd...\n"); + printf("Restarting adbd...\n"); set_usb_driver(true); property_set("ctl.start", "adbd"); } } int -apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) { - ui = ui_; +apply_from_adb(const char* install_file) { stop_adbd(); set_usb_driver(true); - +/* ui->Print("\n\nNow send the package you want to apply\n" "to the device with \"adb sideload \"...\n"); - +*/ pid_t child; if ((child = fork()) == 0) { execl("/sbin/recovery", "recovery", "--adbd", install_file, NULL); _exit(-1); } - DataManager_SetIntValue("tw_child_pid", child); + char child_prop[PROPERTY_VALUE_MAX]; + sprintf(child_prop, "%i", child); + property_set("tw_child_pid", child_prop); int status; // TODO(dougz): there should be a way to cancel waiting for a // package (by pushing some button combo on the device). For now @@ -105,20 +102,19 @@ apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) { // package, like "/dev/null". waitpid(child, &status, 0); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { - ui->Print("status %d\n", WEXITSTATUS(status)); + printf("status %d\n", WEXITSTATUS(status)); } - DataManager_SetIntValue("tw_has_cancel", 0); // Remove cancel button from gui now that the zip install is going to start set_usb_driver(false); maybe_restart_adbd(); struct stat st; if (stat(install_file, &st) != 0) { if (errno == ENOENT) { - ui->Print("No package received.\n"); + printf("No package received.\n"); } else { - ui->Print("Error reading package:\n %s\n", strerror(errno)); + printf("Error reading package:\n %s\n", strerror(errno)); } - return INSTALL_ERROR; + return -1; } - return TWinstall_zip(install_file, wipe_cache); + return 0; } diff --git a/adb_install.h b/adb_install.h index a18b712a2..a7cb33686 100644 --- a/adb_install.h +++ b/adb_install.h @@ -17,8 +17,8 @@ #ifndef _ADB_INSTALL_H #define _ADB_INSTALL_H -class RecoveryUI; +//class RecoveryUI; -int apply_from_adb(RecoveryUI* h, int* wipe_cache, const char* install_file); +int apply_from_adb(const char* install_file); #endif diff --git a/bootloader.cpp b/bootloader.cpp index 6f4f83abf..6b42b947a 100644 --- a/bootloader.cpp +++ b/bootloader.cpp @@ -33,7 +33,7 @@ static int get_bootloader_message_block(struct bootloader_message *out, const Vo static int set_bootloader_message_block(const struct bootloader_message *in, const Volume* v); int get_bootloader_message(struct bootloader_message *out) { - Volume* v = volume_for_path("/misc"); + Volume* v = NULL;//volume_for_path("/misc"); if (v == NULL) { LOGE("Cannot load volume /misc!\n"); return -1; @@ -48,7 +48,7 @@ int get_bootloader_message(struct bootloader_message *out) { } int set_bootloader_message(const struct bootloader_message *in) { - Volume* v = volume_for_path("/misc"); + Volume* v = NULL;//volume_for_path("/misc"); if (v == NULL) { LOGE("Cannot load volume /misc!\n"); return -1; @@ -139,6 +139,49 @@ static int set_bootloader_message_mtd(const struct bootloader_message *in, return 0; } +int set_bootloader_message_mtd_name(const struct bootloader_message *in, + const char* mtd_name) { + size_t write_size; + mtd_scan_partitions(); + const MtdPartition *part = mtd_find_partition_by_name(mtd_name); + if (part == NULL || mtd_partition_info(part, NULL, NULL, &write_size)) { + printf("Can't find %s\n", mtd_name); + return -1; + } + + MtdReadContext *read = mtd_read_partition(part); + if (read == NULL) { + printf("Can't open %s\n(%s)\n", mtd_name, strerror(errno)); + return -1; + } + + ssize_t size = write_size * MISC_PAGES; + char data[size]; + ssize_t r = mtd_read_data(read, data, size); + if (r != size) printf("Can't read %s\n(%s)\n", mtd_name, strerror(errno)); + mtd_read_close(read); + if (r != size) return -1; + + memcpy(&data[write_size * MISC_COMMAND_PAGE], in, sizeof(*in)); + + MtdWriteContext *write = mtd_write_partition(part); + if (write == NULL) { + printf("Can't open %s\n(%s)\n", mtd_name, strerror(errno)); + return -1; + } + if (mtd_write_data(write, data, size) != size) { + printf("Can't write %s\n(%s)\n", mtd_name, strerror(errno)); + mtd_write_close(write); + return -1; + } + if (mtd_write_close(write)) { + printf("Can't finish %s\n(%s)\n", mtd_name, strerror(errno)); + return -1; + } + + printf("Set boot command \"%s\"\n", in->command[0] != 255 ? in->command : ""); + return 0; +} // ------------------------------------ // for misc partitions on block devices @@ -202,3 +245,23 @@ static int set_bootloader_message_block(const struct bootloader_message *in, } return 0; } + +int set_bootloader_message_block_name(const struct bootloader_message *in, + const char* block_name) { + wait_for_device(block_name); + FILE* f = fopen(block_name, "wb"); + if (f == NULL) { + printf("Can't open %s\n(%s)\n", block_name, strerror(errno)); + return -1; + } + int count = fwrite(in, sizeof(*in), 1, f); + if (count != 1) { + printf("Failed writing %s\n(%s)\n", block_name, strerror(errno)); + return -1; + } + if (fclose(f) != 0) { + printf("Failed closing %s\n(%s)\n", block_name, strerror(errno)); + return -1; + } + return 0; +} diff --git a/bootloader.h b/bootloader.h index 712aa1a2d..38bb19e9b 100644 --- a/bootloader.h +++ b/bootloader.h @@ -51,6 +51,9 @@ struct bootloader_message { int get_bootloader_message(struct bootloader_message *out); int set_bootloader_message(const struct bootloader_message *in); +int set_bootloader_message_mtd_name(const struct bootloader_message *in, const char* mtd_name); +int set_bootloader_message_block_name(const struct bootloader_message *in, const char* block_name); + #ifdef __cplusplus } #endif diff --git a/common.h b/common.h index 7bd769a34..434429812 100644 --- a/common.h +++ b/common.h @@ -25,12 +25,11 @@ extern "C" { static long tmplog_offset = 0; -#define ui_print(...) gui_print(__VA_ARGS__) -#define ui_print_overwrite(...) gui_print_overwrite(__VA_ARGS__) +#define ui_print(...) printf(__VA_ARGS__) +#define ui_print_overwrite(...) printf(__VA_ARGS__) -#include "gui/gui.h" // TODO: restore ui_print for LOGE -#define LOGE(...) gui_print("E:" __VA_ARGS__) +#define LOGE(...) printf("E:" __VA_ARGS__) #define LOGW(...) fprintf(stdout, "W:" __VA_ARGS__) #define LOGI(...) fprintf(stdout, "I:" __VA_ARGS__) diff --git a/crypto/ics/Android.mk b/crypto/ics/Android.mk new file mode 100644 index 000000000..88f3b845a --- /dev/null +++ b/crypto/ics/Android.mk @@ -0,0 +1,13 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libcryptfsics +LOCAL_MODULE_TAGS := eng +LOCAL_MODULES_TAGS = optional +LOCAL_CFLAGS = +LOCAL_SRC_FILES = cryptfs.c +LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include +LOCAL_SHARED_LIBRARIES += libc liblog libcutils libcrypto + +include $(BUILD_SHARED_LIBRARY) diff --git a/crypto/jb/Android.mk b/crypto/jb/Android.mk new file mode 100644 index 000000000..87eb055a6 --- /dev/null +++ b/crypto/jb/Android.mk @@ -0,0 +1,14 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libcryptfsjb +LOCAL_MODULE_TAGS := eng +LOCAL_MODULES_TAGS = optional +LOCAL_CFLAGS = +LOCAL_SRC_FILES = cryptfs.c +LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include +LOCAL_SHARED_LIBRARIES += libc liblog libcutils libcrypto +LOCAL_STATIC_LIBRARIES += libfs_mgrtwrp + +include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/data.cpp b/data.cpp index c33fa89d9..9c60eddc5 100644 --- a/data.cpp +++ b/data.cpp @@ -48,7 +48,7 @@ extern "C" { - #include "common.h" + #include "twcommon.h" #include "data.h" #include "gui/pages.h" @@ -102,7 +102,7 @@ void DataManager::get_device_id(void) { char model_id[PROPERTY_VALUE_MAX]; property_get("ro.product.model", model_id, "error"); if (strcmp(model_id,"error") != 0) { - LOGI("=> product model: '%s'\n", model_id); + LOGINFO("=> product model: '%s'\n", model_id); // Replace spaces with underscores for(int i = 0; i < strlen(model_id); i++) { if(model_id[i] == ' ') @@ -115,7 +115,7 @@ void DataManager::get_device_id(void) { } sanitize_device_id((char *)device_id); mConstValues.insert(make_pair("device_id", device_id)); - LOGI("=> using device id: '%s'\n", device_id); + LOGINFO("=> using device id: '%s'\n", device_id); return; } #endif @@ -166,7 +166,7 @@ void DataManager::get_device_id(void) { } else { strcpy(device_id, token); } - LOGI("=> serial from cpuinfo: '%s'\n", device_id); + LOGINFO("=> serial from cpuinfo: '%s'\n", device_id); fclose(fp); sanitize_device_id((char *)device_id); mConstValues.insert(make_pair("device_id", device_id)); @@ -184,7 +184,7 @@ void DataManager::get_device_id(void) { } else { strcpy(hardware_id, token); } - LOGI("=> hardware id from cpuinfo: '%s'\n", hardware_id); + LOGINFO("=> hardware id from cpuinfo: '%s'\n", hardware_id); } } } @@ -192,7 +192,7 @@ void DataManager::get_device_id(void) { } if (hardware_id[0] != 0) { - LOGW("\nusing hardware id for device id: '%s'\n", hardware_id); + LOGINFO("\nusing hardware id for device id: '%s'\n", hardware_id); strcpy(device_id, hardware_id); sanitize_device_id((char *)device_id); mConstValues.insert(make_pair("device_id", device_id)); @@ -200,7 +200,7 @@ void DataManager::get_device_id(void) { } strcpy(device_id, "serialno"); - LOGE("=> device id not found, using '%s'.", device_id); + LOGERR("=> device id not found, using '%s'.", device_id); mConstValues.insert(make_pair("device_id", device_id)); return; } @@ -227,10 +227,10 @@ int DataManager::LoadValues(const string filename) // Read in the file, if possible FILE* in = fopen(filename.c_str(), "rb"); if (!in) { - LOGI("Settings file '%s' not found.\n", filename.c_str()); + LOGINFO("Settings file '%s' not found.\n", filename.c_str()); return 0; } else { - LOGI("Loading settings from '%s'.\n", filename.c_str()); + LOGINFO("Loading settings from '%s'.\n", filename.c_str()); } int file_version; @@ -360,6 +360,17 @@ int DataManager::GetValue(const string varName, int& value) return 0; } +int DataManager::GetValue(const string varName, float& value) +{ + string data; + + if (GetValue(varName,data) != 0) + return -1; + + value = atof(data.c_str()); + return 0; +} + unsigned long long DataManager::GetValue(const string varName, unsigned long long& value) { string data; @@ -461,7 +472,7 @@ int DataManager::SetValue(const string varName, int value, int persist /* = 0 */ SetValue("tw_storage_path", str); SetBackupFolder(); } - return SetValue(varName, valStr.str(), persist);; + return SetValue(varName, valStr.str(), persist); } int DataManager::SetValue(const string varName, float value, int persist /* = 0 */) @@ -478,13 +489,27 @@ int DataManager::SetValue(const string varName, unsigned long long value, int pe return SetValue(varName, valStr.str(), persist);; } +int DataManager::SetProgress(float Fraction) { + return SetValue("ui_progress", (float) (Fraction * 100.0)); +} + +int DataManager::ShowProgress(float Portion, float Seconds) { + float Starting_Portion; + GetValue("ui_progress_portion", Starting_Portion); + if (SetValue("ui_progress_portion", (float)(Portion * 100.0) + Starting_Portion) != 0) + return -1; + if (SetValue("ui_progress_frames", Seconds * 30) != 0) + return -1; + return 0; +} + void DataManager::DumpValues() { map::iterator iter; - ui_print("Data Manager dump - Values with leading X are persisted.\n"); + gui_print("Data Manager dump - Values with leading X are persisted.\n"); for (iter = mValues.begin(); iter != mValues.end(); ++iter) { - ui_print("%c %s=%s\n", iter->second.second ? 'X' : ' ', iter->first.c_str(), iter->second.first.c_str()); + gui_print("%c %s=%s\n", iter->second.second ? 'X' : ' ', iter->first.c_str(), iter->second.first.c_str()); } } @@ -503,7 +528,7 @@ void DataManager::SetBackupFolder() GetValue("device_id", dev_id); str += dev_id; - LOGI("Backup folder set to '%s'\n", str.c_str()); + LOGINFO("Backup folder set to '%s'\n", str.c_str()); SetValue(TW_BACKUPS_FOLDER_VAR, str, 0); if (partition != NULL) { SetValue("tw_storage_display_name", partition->Storage_Name); @@ -526,7 +551,7 @@ void DataManager::SetBackupFolder() } } else { if (PartitionManager.Fstab_Processed() != 0) - LOGE("Storage partition '%s' not found\n", str.c_str()); + LOGERR("Storage partition '%s' not found\n", str.c_str()); } } @@ -563,7 +588,7 @@ void DataManager::SetDefaultValues() #endif #ifdef TW_INTERNAL_STORAGE_PATH - LOGI("Internal path defined: '%s'\n", EXPAND(TW_INTERNAL_STORAGE_PATH)); + LOGINFO("Internal path defined: '%s'\n", EXPAND(TW_INTERNAL_STORAGE_PATH)); mValues.insert(make_pair(TW_USE_EXTERNAL_STORAGE, make_pair("0", 1))); mConstValues.insert(make_pair(TW_HAS_INTERNAL, "1")); mValues.insert(make_pair(TW_INTERNAL_PATH, make_pair(EXPAND(TW_INTERNAL_STORAGE_PATH), 0))); @@ -573,7 +598,7 @@ void DataManager::SetDefaultValues() path += EXPAND(TW_INTERNAL_STORAGE_MOUNT_POINT); mConstValues.insert(make_pair(TW_INTERNAL_MOUNT, path)); #ifdef TW_EXTERNAL_STORAGE_PATH - LOGI("External path defined: '%s'\n", EXPAND(TW_EXTERNAL_STORAGE_PATH)); + LOGINFO("External path defined: '%s'\n", EXPAND(TW_EXTERNAL_STORAGE_PATH)); // Device has dual storage mConstValues.insert(make_pair(TW_HAS_DUAL_STORAGE, "1")); mConstValues.insert(make_pair(TW_HAS_EXTERNAL, "1")); @@ -590,7 +615,7 @@ void DataManager::SetDefaultValues() mValues.insert(make_pair(TW_ZIP_INTERNAL_VAR, make_pair("/sdcard", 1))); } #else - LOGI("Just has internal storage.\n"); + LOGINFO("Just has internal storage.\n"); // Just has internal storage mValues.insert(make_pair(TW_ZIP_INTERNAL_VAR, make_pair("/sdcard", 1))); mConstValues.insert(make_pair(TW_HAS_DUAL_STORAGE, "0")); @@ -602,22 +627,22 @@ void DataManager::SetDefaultValues() #else #ifdef RECOVERY_SDCARD_ON_DATA #ifdef TW_EXTERNAL_STORAGE_PATH - LOGI("Has /data/media + external storage in '%s'\n", EXPAND(TW_EXTERNAL_STORAGE_PATH)); + LOGINFO("Has /data/media + external storage in '%s'\n", EXPAND(TW_EXTERNAL_STORAGE_PATH)); // Device has /data/media + external storage mConstValues.insert(make_pair(TW_HAS_DUAL_STORAGE, "1")); #else - LOGI("Single storage only -- data/media.\n"); + LOGINFO("Single storage only -- data/media.\n"); // Device just has external storage mConstValues.insert(make_pair(TW_HAS_DUAL_STORAGE, "0")); mConstValues.insert(make_pair(TW_HAS_EXTERNAL, "0")); #endif #else - LOGI("Single storage only.\n"); + LOGINFO("Single storage only.\n"); // Device just has external storage mConstValues.insert(make_pair(TW_HAS_DUAL_STORAGE, "0")); #endif #ifdef RECOVERY_SDCARD_ON_DATA - LOGI("Device has /data/media defined.\n"); + LOGINFO("Device has /data/media defined.\n"); // Device has /data/media mConstValues.insert(make_pair(TW_USE_EXTERNAL_STORAGE, "0")); mConstValues.insert(make_pair(TW_HAS_INTERNAL, "1")); @@ -634,7 +659,7 @@ void DataManager::SetDefaultValues() mValues.insert(make_pair(TW_ZIP_INTERNAL_VAR, make_pair("/sdcard", 1))); #endif #else - LOGI("No internal storage defined.\n"); + LOGINFO("No internal storage defined.\n"); // Device has no internal storage mConstValues.insert(make_pair(TW_USE_EXTERNAL_STORAGE, "1")); mConstValues.insert(make_pair(TW_HAS_INTERNAL, "0")); @@ -643,7 +668,7 @@ void DataManager::SetDefaultValues() mConstValues.insert(make_pair(TW_INTERNAL_LABEL, "0")); #endif #ifdef TW_EXTERNAL_STORAGE_PATH - LOGI("Only external path defined: '%s'\n", EXPAND(TW_EXTERNAL_STORAGE_PATH)); + LOGINFO("Only external path defined: '%s'\n", EXPAND(TW_EXTERNAL_STORAGE_PATH)); // External has custom definition mConstValues.insert(make_pair(TW_HAS_EXTERNAL, "1")); mConstValues.insert(make_pair(TW_EXTERNAL_PATH, EXPAND(TW_EXTERNAL_STORAGE_PATH))); @@ -655,7 +680,7 @@ void DataManager::SetDefaultValues() mConstValues.insert(make_pair(TW_EXTERNAL_MOUNT, path)); #else #ifndef RECOVERY_SDCARD_ON_DATA - LOGI("No storage defined, defaulting to /sdcard.\n"); + LOGINFO("No storage defined, defaulting to /sdcard.\n"); // Standard external definition mConstValues.insert(make_pair(TW_HAS_EXTERNAL, "1")); mConstValues.insert(make_pair(TW_EXTERNAL_PATH, "/sdcard")); @@ -779,10 +804,10 @@ void DataManager::SetDefaultValues() Lun_File_str = lun_file; } if (!TWFunc::Path_Exists(Lun_File_str)) { - LOGI("Lun file '%s' does not exist, USB storage mode disabled\n", Lun_File_str.c_str()); + LOGINFO("Lun file '%s' does not exist, USB storage mode disabled\n", Lun_File_str.c_str()); mConstValues.insert(make_pair(TW_HAS_USB_STORAGE, "0")); } else { - LOGI("Lun file '%s'\n", Lun_File_str.c_str()); + LOGINFO("Lun file '%s'\n", Lun_File_str.c_str()); mConstValues.insert(make_pair(TW_HAS_USB_STORAGE, "1")); } #endif @@ -886,7 +911,7 @@ void DataManager::SetDefaultValues() mValues.insert(make_pair("tw_gui_done", make_pair("0", 0))); #ifdef TW_MAX_BRIGHTNESS if (strcmp(EXPAND(TW_BRIGHTNESS_PATH), "/nobrightness") != 0) { - LOGI("TW_BRIGHTNESS_PATH := %s\n", EXPAND(TW_BRIGHTNESS_PATH)); + LOGINFO("TW_BRIGHTNESS_PATH := %s\n", EXPAND(TW_BRIGHTNESS_PATH)); mConstValues.insert(make_pair("tw_has_brightnesss_file", "1")); mConstValues.insert(make_pair("tw_brightness_file", EXPAND(TW_BRIGHTNESS_PATH))); ostringstream val100, val25, val50, val75; @@ -996,13 +1021,13 @@ void DataManager::Output_Version(void) { char version[255]; if (!PartitionManager.Mount_By_Path("/cache", false)) { - LOGI("Unable to mount '%s' to write version number.\n", Path.c_str()); + LOGINFO("Unable to mount '%s' to write version number.\n", Path.c_str()); return; } if (!TWFunc::Path_Exists("/cache/recovery/.")) { - LOGI("Recreating /cache/recovery folder.\n"); + LOGINFO("Recreating /cache/recovery folder.\n"); if (mkdir("/cache/recovery", S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP) != 0) { - LOGE("DataManager::Output_Version -- Unable to make /cache/recovery\n"); + LOGERR("DataManager::Output_Version -- Unable to make /cache/recovery\n"); return; } } @@ -1012,14 +1037,14 @@ void DataManager::Output_Version(void) { } FILE *fp = fopen(Path.c_str(), "w"); if (fp == NULL) { - LOGE("Unable to open '%s'.\n", Path.c_str()); + LOGERR("Unable to open '%s'.\n", Path.c_str()); return; } strcpy(version, TW_VERSION_STR); fwrite(version, sizeof(version[0]), strlen(version) / sizeof(version[0]), fp); fclose(fp); sync(); - LOGI("Version number saved to '%s'\n", Path.c_str()); + LOGINFO("Version number saved to '%s'\n", Path.c_str()); } void DataManager::ReadSettingsFile(void) @@ -1031,7 +1056,7 @@ void DataManager::ReadSettingsFile(void) GetValue(TW_IS_ENCRYPTED, is_enc); GetValue(TW_HAS_DATA_MEDIA, has_data_media); if (is_enc == 1 && has_data_media == 1) { - LOGI("Cannot load settings -- encrypted.\n"); + LOGINFO("Cannot load settings -- encrypted.\n"); return; } @@ -1044,12 +1069,12 @@ void DataManager::ReadSettingsFile(void) { usleep(500000); if (!PartitionManager.Mount_Settings_Storage(false)) - LOGE("Unable to mount %s when trying to read settings file.\n", settings_file); + LOGERR("Unable to mount %s when trying to read settings file.\n", settings_file); } mkdir(mkdir_path, 0777); - LOGI("Attempt to load settings from settings file...\n"); + LOGINFO("Attempt to load settings from settings file...\n"); LoadValues(settings_file); Output_Version(); GetValue(TW_HAS_DUAL_STORAGE, has_dual); @@ -1058,7 +1083,7 @@ void DataManager::ReadSettingsFile(void) if (has_dual != 0 && use_ext == 1) { // Attempt to switch to using external storage if (!PartitionManager.Mount_Current_Storage(false)) { - LOGE("Failed to mount external storage, using internal storage.\n"); + LOGERR("Failed to mount external storage, using internal storage.\n"); // Remount failed, default back to internal storage SetValue(TW_USE_EXTERNAL_STORAGE, 0); PartitionManager.Mount_Current_Storage(true); diff --git a/data.hpp b/data.hpp index b540675cd..ff50373bb 100644 --- a/data.hpp +++ b/data.hpp @@ -33,6 +33,7 @@ public: // Core get routines static int GetValue(const string varName, string& value); static int GetValue(const string varName, int& value); + static int GetValue(const string varName, float& value); static unsigned long long GetValue(const string varName, unsigned long long& value); // This is a dangerous function. It will create the value if it doesn't exist so it has a valid c_str @@ -47,6 +48,8 @@ public: static int SetValue(const string varName, int value, int persist = 0); static int SetValue(const string varName, float value, int persist = 0); static int SetValue(const string varName, unsigned long long value, int persist = 0); + static int SetProgress(float Fraction); + static int ShowProgress(float Portion, float Seconds); static void DumpValues(); static void update_tz_environment_variables(); diff --git a/fixPermissions.cpp b/fixPermissions.cpp index eae78e883..1d2c51829 100644 --- a/fixPermissions.cpp +++ b/fixPermissions.cpp @@ -29,7 +29,7 @@ #include "gui/rapidxml.hpp" #include "fixPermissions.hpp" #include "twrp-functions.hpp" -#include "common.h" +#include "twcommon.h" using namespace std; using namespace rapidxml; @@ -41,25 +41,25 @@ int fixPermissions::fixPerms(bool enable_debug, bool remove_data_for_missing_app multi_user = TWFunc::Path_Exists("/data/user"); if (!(TWFunc::Path_Exists(packageFile))) { - ui_print("Can't check permissions\n"); - ui_print("after Factory Reset.\n"); - ui_print("Please boot rom and try\n"); - ui_print("again after you reboot into\n"); - ui_print("recovery.\n"); + gui_print("Can't check permissions\n"); + gui_print("after Factory Reset.\n"); + gui_print("Please boot rom and try\n"); + gui_print("again after you reboot into\n"); + gui_print("recovery.\n"); return -1; } - ui_print("Fixing permissions...\nLoading packages...\n"); + gui_print("Fixing permissions...\nLoading packages...\n"); if ((getPackages()) != 0) { return -1; } - ui_print("Fixing /system/app permissions...\n"); + gui_print("Fixing /system/app permissions...\n"); if ((fixSystemApps()) != 0) { return -1; } - ui_print("Fixing /data/app permisions...\n"); + gui_print("Fixing /data/app permisions...\n"); if ((fixDataApps()) != 0) { return -1; } @@ -69,7 +69,7 @@ int fixPermissions::fixPerms(bool enable_debug, bool remove_data_for_missing_app string new_path, user_id; if (d == NULL) { - LOGE("Error opening '/data/user'\n"); + LOGERR("Error opening '/data/user'\n"); return -1; } @@ -102,7 +102,7 @@ int fixPermissions::fixPerms(bool enable_debug, bool remove_data_for_missing_app // the uid and gid is stored for other users. continue; } - ui_print("Fixing %s permissions...\n", new_path.c_str()); + gui_print("Fixing %s permissions...\n", new_path.c_str()); if ((fixDataData(new_path)) != 0) { closedir(d); return -1; @@ -111,19 +111,19 @@ int fixPermissions::fixPerms(bool enable_debug, bool remove_data_for_missing_app closedir(d); } } else { - ui_print("Fixing /data/data permisions...\n"); + gui_print("Fixing /data/data permisions...\n"); if ((fixDataData("/data/data/")) != 0) { return -1; } } - ui_print("Done fixing permissions.\n"); + gui_print("Done fixing permissions.\n"); return 0; } int fixPermissions::pchown(string fn, int puid, int pgid) { - LOGI("Fixing %s, uid: %d, gid: %d\n", fn.c_str(), puid, pgid); + LOGINFO("Fixing %s, uid: %d, gid: %d\n", fn.c_str(), puid, pgid); if (chown(fn.c_str(), puid, pgid) != 0) { - LOGE("Unable to chown '%s' %i %i\n", fn.c_str(), puid, pgid); + LOGERR("Unable to chown '%s' %i %i\n", fn.c_str(), puid, pgid); return -1; } return 0; @@ -131,7 +131,7 @@ int fixPermissions::pchown(string fn, int puid, int pgid) { int fixPermissions::pchmod(string fn, string mode) { long mask = 0; - LOGI("Fixing %s, mode: %s\n", fn.c_str(), mode.c_str()); + LOGINFO("Fixing %s, mode: %s\n", fn.c_str(), mode.c_str()); for ( std::string::size_type n = 0; n < mode.length(); ++n) { if (n == 0) { if (mode[n] == '0') @@ -213,7 +213,7 @@ int fixPermissions::pchmod(string fn, string mode) { } if (chmod(fn.c_str(), mask) != 0) { - LOGE("Unable to chmod '%s' %l\n", fn.c_str(), mask); + LOGERR("Unable to chmod '%s' %l\n", fn.c_str(), mask); return -1; } @@ -226,10 +226,10 @@ int fixPermissions::fixSystemApps() { if (TWFunc::Path_Exists(temp->codePath)) { if (temp->appDir.compare("/system/app") == 0) { if (debug) { - LOGI("Looking at '%s'\n", temp->codePath.c_str()); - LOGI("Fixing permissions on '%s'\n", temp->pkgName.c_str()); - LOGI("Directory: '%s'\n", temp->appDir.c_str()); - LOGI("Original package owner: %d, group: %d\n", temp->uid, temp->gid); + LOGINFO("Looking at '%s'\n", temp->codePath.c_str()); + LOGINFO("Fixing permissions on '%s'\n", temp->pkgName.c_str()); + LOGINFO("Directory: '%s'\n", temp->appDir.c_str()); + LOGINFO("Original package owner: %d, group: %d\n", temp->uid, temp->gid); } if (pchown(temp->codePath, 0, 0) != 0) return -1; @@ -240,9 +240,9 @@ int fixPermissions::fixSystemApps() { //Remove data directory since app isn't installed if (remove_data && TWFunc::Path_Exists(temp->dDir) && temp->appDir.size() >= 9 && temp->appDir.substr(0, 9) != "/mnt/asec") { if (debug) - LOGI("Looking at '%s', removing data dir: '%s', appDir: '%s'", temp->codePath.c_str(), temp->dDir.c_str(), temp->appDir.c_str()); + LOGINFO("Looking at '%s', removing data dir: '%s', appDir: '%s'", temp->codePath.c_str(), temp->dDir.c_str(), temp->appDir.c_str()); if (TWFunc::removeDir(temp->dDir, false) != 0) { - LOGI("Unable to removeDir '%s'\n", temp->dDir.c_str()); + LOGINFO("Unable to removeDir '%s'\n", temp->dDir.c_str()); return -1; } } @@ -272,10 +272,10 @@ int fixPermissions::fixDataApps() { fix = false; if (fix) { if (debug) { - LOGI("Looking at '%s'\n", temp->codePath.c_str()); - LOGI("Fixing permissions on '%s'\n", temp->pkgName.c_str()); - LOGI("Directory: '%s'\n", temp->appDir.c_str()); - LOGI("Original package owner: %d, group: %d\n", temp->uid, temp->gid); + LOGINFO("Looking at '%s'\n", temp->codePath.c_str()); + LOGINFO("Fixing permissions on '%s'\n", temp->pkgName.c_str()); + LOGINFO("Directory: '%s'\n", temp->appDir.c_str()); + LOGINFO("Original package owner: %d, group: %d\n", temp->uid, temp->gid); } if (pchown(temp->codePath, 1000, new_gid) != 0) return -1; @@ -286,9 +286,9 @@ int fixPermissions::fixDataApps() { //Remove data directory since app isn't installed if (remove_data && TWFunc::Path_Exists(temp->dDir) && temp->appDir.size() >= 9 && temp->appDir.substr(0, 9) != "/mnt/asec") { if (debug) - LOGI("Looking at '%s', removing data dir: '%s', appDir: '%s'", temp->codePath.c_str(), temp->dDir.c_str(), temp->appDir.c_str()); + LOGINFO("Looking at '%s', removing data dir: '%s', appDir: '%s'", temp->codePath.c_str(), temp->dDir.c_str(), temp->appDir.c_str()); if (TWFunc::removeDir(temp->dDir, false) != 0) { - LOGI("Unable to removeDir '%s'\n", temp->dDir.c_str()); + LOGINFO("Unable to removeDir '%s'\n", temp->dDir.c_str()); return -1; } } @@ -307,7 +307,7 @@ int fixPermissions::fixAllFiles(string directory, int gid, int uid, string file_ file = directory + "/"; file.append(files.at(i)); if (debug) - LOGI("Looking at file '%s'\n", file.c_str()); + LOGINFO("Looking at file '%s'\n", file.c_str()); if (pchmod(file, file_perms) != 0) return -1; if (pchown(file, uid, gid) != 0) @@ -328,7 +328,7 @@ int fixPermissions::fixDataData(string dataDir) { directory = dir + "/"; directory.append(dataDataDirs.at(n)); if (debug) - LOGI("Looking at data directory: '%s'\n", directory.c_str()); + LOGINFO("Looking at data directory: '%s'\n", directory.c_str()); if (dataDataDirs.at(n) == ".") { if (pchmod(directory, "0755") != 0) return -1; @@ -339,7 +339,7 @@ int fixPermissions::fixDataData(string dataDir) { } else if (dataDataDirs.at(n) == "..") { if (debug) - LOGI("Skipping ..\n"); + LOGINFO("Skipping ..\n"); continue; } else if (dataDataDirs.at(n) == "lib") { @@ -394,7 +394,7 @@ vector fixPermissions::listAllDirectories(string path) { vector dirs; if (dir == NULL) { - LOGE("Error opening '%s'\n", path.c_str()); + LOGERR("Error opening '%s'\n", path.c_str()); return dirs; } struct dirent *entry = readdir(dir); @@ -412,7 +412,7 @@ vector fixPermissions::listAllFiles(string path) { vector files; if (dir == NULL) { - LOGE("Error opening '%s'\n", path.c_str()); + LOGERR("Error opening '%s'\n", path.c_str()); return files; } struct dirent *entry = readdir(dir); @@ -449,7 +449,7 @@ int fixPermissions::getPackages() { xml_node <> * next = pkgNode->first_node("package"); if (next == NULL) { - LOGE("No packages found to fix.\n"); + LOGERR("No packages found to fix.\n"); return -1; } @@ -465,7 +465,7 @@ int fixPermissions::getPackages() { if (skiploop == true) { if (debug) - LOGI("Skipping package %s\n", next->first_attribute("codePath")->value()); + LOGINFO("Skipping package %s\n", next->first_attribute("codePath")->value()); free(temp); next = next->next_sibling(); skiploop = false; @@ -474,9 +474,9 @@ int fixPermissions::getPackages() { name.append((next->first_attribute("name")->value())); temp->pkgName = next->first_attribute("name")->value(); if (debug) - LOGI("Loading pkg: %s\n", next->first_attribute("name")->value()); + LOGINFO("Loading pkg: %s\n", next->first_attribute("name")->value()); if (next->first_attribute("codePath") == NULL) { - LOGI("Problem with codePath on %s\n", next->first_attribute("name")->value()); + LOGINFO("Problem with codePath on %s\n", next->first_attribute("name")->value()); } else { temp->codePath = next->first_attribute("codePath")->value(); temp->app = basename(next->first_attribute("codePath")->value()); @@ -489,7 +489,7 @@ int fixPermissions::getPackages() { } else { if (next->first_attribute("userId") == NULL) { - LOGI("Problem with userID on %s\n", next->first_attribute("name")->value()); + LOGINFO("Problem with userID on %s\n", next->first_attribute("name")->value()); } else { temp->uid = atoi(next->first_attribute("userId")->value()); temp->gid = atoi(next->first_attribute("userId")->value()); @@ -516,7 +516,7 @@ int fixPermissions::getPackages() { if (skiploop == true) { if (debug) - LOGI("Skipping package %s\n", next->first_attribute("codePath")->value()); + LOGINFO("Skipping package %s\n", next->first_attribute("codePath")->value()); free(temp); next = next->next_sibling(); skiploop = false; @@ -525,9 +525,9 @@ int fixPermissions::getPackages() { name.append((next->first_attribute("name")->value())); temp->pkgName = next->first_attribute("name")->value(); if (debug) - LOGI("Loading pkg: %s\n", next->first_attribute("name")->value()); + LOGINFO("Loading pkg: %s\n", next->first_attribute("name")->value()); if (next->first_attribute("codePath") == NULL) { - LOGI("Problem with codePath on %s\n", next->first_attribute("name")->value()); + LOGINFO("Problem with codePath on %s\n", next->first_attribute("name")->value()); } else { temp->codePath = next->first_attribute("codePath")->value(); temp->app = basename(next->first_attribute("codePath")->value()); @@ -541,7 +541,7 @@ int fixPermissions::getPackages() { } else { if (next->first_attribute("userId") == NULL) { - LOGI("Problem with userID on %s\n", next->first_attribute("name")->value()); + LOGINFO("Problem with userID on %s\n", next->first_attribute("name")->value()); } else { temp->uid = atoi(next->first_attribute("userId")->value()); temp->gid = atoi(next->first_attribute("userId")->value()); diff --git a/gui/Android.mk b/gui/Android.mk index b3e9b092a..748c5ec81 100644 --- a/gui/Android.mk +++ b/gui/Android.mk @@ -30,7 +30,7 @@ else LOCAL_SRC_FILES += hardwarekeyboard.cpp endif -LOCAL_MODULE := libgui +LOCAL_MODULE := libguitwrp # Use this flag to create a build that simulates threaded actions like installing zips, backups, restores, and wipes for theme testing #TWRP_SIMULATE_ACTIONS := true diff --git a/gui/action.cpp b/gui/action.cpp index 345632410..b35074cf0 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -38,17 +38,15 @@ #include "../twrp-functions.hpp" #include "../openrecoveryscript.hpp" -#include "../ui.h" #include "../adb_install.h" #include "blanktimer.hpp" extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" #include "../variables.h" #include "../twinstall.h" - +#include "cutils/properties.h" #include "../minadbd/adb.h" int TWinstall_zip(const char* path, int* wipe_cache); @@ -60,7 +58,6 @@ int gui_start(); #include "rapidxml.hpp" #include "objects.hpp" -extern RecoveryUI* ui; extern blanktimer blankTimer; void curtainClose(void); @@ -160,7 +157,7 @@ int GUIAction::NotifyVarChange(std::string varName, std::string value) void GUIAction::simulate_progress_bar(void) { - ui_print("Simulating actions...\n"); + gui_print("Simulating actions...\n"); for (int i = 0; i < 5; i++) { usleep(500000); @@ -176,7 +173,7 @@ int GUIAction::flash_zip(std::string filename, std::string pageName, const int s if (filename.empty()) { - LOGE("No file specified.\n"); + LOGERR("No file specified.\n"); return -1; } @@ -191,7 +188,7 @@ int GUIAction::flash_zip(std::string filename, std::string pageName, const int s if (mzOpenZipArchive(filename.c_str(), &zip)) { - LOGE("Unable to open zip file.\n"); + LOGERR("Unable to open zip file.\n"); return -1; } @@ -231,10 +228,10 @@ int GUIAction::flash_zip(std::string filename, std::string pageName, const int s { DataManager::SetValue("tw_operation", "Configuring TWRP"); DataManager::SetValue("tw_partition", ""); - ui_print("Configuring TWRP...\n"); + gui_print("Configuring TWRP...\n"); if (TWFunc::Exec_Cmd("/sbin/installTwrp reinstall", result) < 0) { - ui_print("Unable to configure TWRP with this kernel.\n"); + gui_print("Unable to configure TWRP with this kernel.\n"); } } } @@ -256,33 +253,33 @@ int GUIAction::doActions() pthread_attr_t tattr; if (pthread_attr_init(&tattr)) { - LOGE("Unable to pthread_attr_init\n"); + LOGERR("Unable to pthread_attr_init\n"); return -1; } if (pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE)) { - LOGE("Error setting pthread_attr_setdetachstate\n"); + LOGERR("Error setting pthread_attr_setdetachstate\n"); return -1; } if (pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM)) { - LOGE("Error setting pthread_attr_setscope\n"); + LOGERR("Error setting pthread_attr_setscope\n"); return -1; } /*if (pthread_attr_setstacksize(&tattr, 524288)) { - LOGE("Error setting pthread_attr_setstacksize\n"); + LOGERR("Error setting pthread_attr_setstacksize\n"); return -1; } */ int ret = pthread_create(&t, &tattr, thread_start, this); if (ret) { - LOGE("Unable to create more threads for actions... continuing in same thread! %i\n", ret); + LOGERR("Unable to create more threads for actions... continuing in same thread! %i\n", ret); thread_start(this); } else { if (pthread_join(t, NULL)) { - LOGE("Error joining threads\n"); + LOGERR("Error joining threads\n"); } } if (pthread_attr_destroy(&tattr)) { - LOGE("Failed to pthread_attr_destroy\n"); + LOGERR("Failed to pthread_attr_destroy\n"); return -1; } @@ -392,7 +389,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) operation_start("Reload Theme"); theme_path = DataManager::GetSettingsStoragePath(); if (PartitionManager.Mount_By_Path(theme_path.c_str(), 1) < 0) { - LOGE("Unable to mount %s during reload function startup.\n", theme_path.c_str()); + LOGERR("Unable to mount %s during reload function startup.\n", theme_path.c_str()); check = 1; } @@ -400,10 +397,10 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (check != 0 || PageManager::ReloadPackage("TWRP", theme_path) != 0) { // Loading the custom theme failed - try loading the stock theme - LOGI("Attempting to reload stock theme...\n"); + LOGINFO("Attempting to reload stock theme...\n"); if (PageManager::ReloadPackage("TWRP", "/res/ui.xml")) { - LOGE("Failed to load base packages.\n"); + LOGERR("Failed to load base packages.\n"); ret_val = 1; } } @@ -446,7 +443,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (!simulate) PartitionManager.usb_storage_enable(); else - ui_print("Simulating actions...\n"); + gui_print("Simulating actions...\n"); } else if (!simulate) { @@ -458,7 +455,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) else PartitionManager.Mount_By_Path(arg, true); } else - ui_print("Simulating actions...\n"); + gui_print("Simulating actions...\n"); return 0; } @@ -469,7 +466,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (!simulate) PartitionManager.usb_storage_disable(); else - ui_print("Simulating actions...\n"); + gui_print("Simulating actions...\n"); DataManager::SetValue(TW_ACTION_BUSY, 0); } else if (!simulate) @@ -482,7 +479,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) else PartitionManager.UnMount_By_Path(arg, true); } else - ui_print("Simulating actions...\n"); + gui_print("Simulating actions...\n"); return 0; } @@ -490,7 +487,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) { operation_start("Restore Defaults"); if (simulate) // Simulated so that people don't accidently wipe out the "simulation is on" setting - ui_print("Simulating actions...\n"); + gui_print("Simulating actions...\n"); else { DataManager::ResetDefaults(); PartitionManager.Update_System_Details(); @@ -509,7 +506,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) dst = DataManager::GetCurrentStoragePath() + "/recovery.log"; TWFunc::copy_file("/tmp/recovery.log", dst.c_str(), 0755); sync(); - ui_print("Copied recovery log to %s.\n", DataManager::GetCurrentStoragePath().c_str()); + gui_print("Copied recovery log to %s.\n", DataManager::GetCurrentStoragePath().c_str()); } else simulate_progress_bar(); operation_end(0, simulate); @@ -631,7 +628,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (function == "queuezip") { if (zip_queue_index >= 10) { - ui_print("Maximum zip queue reached!\n"); + gui_print("Maximum zip queue reached!\n"); return 0; } DataManager::GetValue("tw_filename", zip_queue[zip_queue_index]); @@ -645,7 +642,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (function == "cancelzip") { if (zip_queue_index <= 0) { - ui_print("Minimum zip queue reached!\n"); + gui_print("Minimum zip queue reached!\n"); return 0; } else { zip_queue_index--; @@ -694,7 +691,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) ret_val = flash_zip(zip_queue[i], arg, simulate, &wipe_cache); if (ret_val != 0) { - ui_print("Error flashing zip '%s'\n", zip_queue[i].c_str()); + gui_print("Error flashing zip '%s'\n", zip_queue[i].c_str()); i = 10; // Error flashing zip - exit queue ret_val = 1; } @@ -707,7 +704,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) string result; if (DataManager::GetIntValue(TW_HAS_INJECTTWRP) == 1 && DataManager::GetIntValue(TW_INJECT_AFTER_ZIP) == 1) { operation_start("ReinjectTWRP"); - ui_print("Injecting TWRP into boot image...\n"); + gui_print("Injecting TWRP into boot image...\n"); if (simulate) { simulate_progress_bar(); } else { @@ -718,7 +715,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) string injectcmd = "injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash bd=" + Boot->Actual_Block_Device; TWFunc::Exec_Cmd(injectcmd, result); } - ui_print("TWRP injection complete.\n"); + gui_print("TWRP injection complete.\n"); } } PartitionManager.Update_System_Details(); @@ -768,15 +765,15 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) TWPartition* wipe_part = NULL; DataManager::GetValue("tw_wipe_list", Wipe_List); - LOGI("wipe list '%s'\n", Wipe_List.c_str()); + LOGINFO("wipe list '%s'\n", Wipe_List.c_str()); if (!Wipe_List.empty()) { size_t start_pos = 0, end_pos = Wipe_List.find(";", start_pos); while (end_pos != string::npos && start_pos < Wipe_List.size()) { wipe_path = Wipe_List.substr(start_pos, end_pos - start_pos); - LOGI("wipe_path '%s'\n", wipe_path.c_str()); + LOGINFO("wipe_path '%s'\n", wipe_path.c_str()); if (wipe_path == "/and-sec") { if (!PartitionManager.Wipe_Android_Secure()) { - LOGE("Unable to wipe android secure\n"); + LOGERR("Unable to wipe android secure\n"); ret_val = false; break; } else { @@ -784,7 +781,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) } } else if (wipe_path == "DALVIK") { if (!PartitionManager.Wipe_Dalvik_Cache()) { - LOGE("Failed to wipe dalvik\n"); + LOGERR("Failed to wipe dalvik\n"); ret_val = false; break; } else { @@ -793,7 +790,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) } if (!skip) { if (!PartitionManager.Wipe_By_Path(wipe_path)) { - LOGE("Unable to wipe '%s'\n", wipe_path.c_str()); + LOGERR("Unable to wipe '%s'\n", wipe_path.c_str()); ret_val = false; break; } else if (wipe_path == DataManager::GetSettingsStoragePath()) { @@ -814,12 +811,12 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) string Storage_Path = DataManager::GetSettingsStoragePath(); if (PartitionManager.Mount_By_Path(Storage_Path, true)) { - LOGI("Making TWRP folder and saving settings.\n"); + LOGINFO("Making TWRP folder and saving settings.\n"); Storage_Path += "/TWRP"; mkdir(Storage_Path.c_str(), 0777); DataManager::Flush(); } else { - LOGE("Unable to recreate TWRP folder and save settings.\n"); + LOGERR("Unable to recreate TWRP folder and save settings.\n"); } } } @@ -879,7 +876,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (function == "fixpermissions") { operation_start("Fix Permissions"); - LOGI("fix permissions started!\n"); + LOGINFO("fix permissions started!\n"); if (simulate) { simulate_progress_bar(); } else { @@ -915,7 +912,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) int allow_partition; DataManager::GetValue(TW_ALLOW_PARTITION_SDCARD, allow_partition); if (allow_partition == 0) { - ui_print("This device does not have a real SD Card!\nAborting!\n"); + gui_print("This device does not have a real SD Card!\nAborting!\n"); } else { if (!PartitionManager.Partition_SDCard()) ret_val = 1; // failed @@ -963,7 +960,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) string result; operation_start("Command"); - LOGI("Running command: '%s'\n", arg.c_str()); + LOGINFO("Running command: '%s'\n", arg.c_str()); if (simulate) { simulate_progress_bar(); } else { @@ -982,19 +979,19 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) DataManager::GetValue("tw_terminal_location", cmdpath); operation_start("CommandOutput"); - ui_print("%s # %s\n", cmdpath.c_str(), arg.c_str()); + gui_print("%s # %s\n", cmdpath.c_str(), arg.c_str()); if (simulate) { simulate_progress_bar(); operation_end(op_status, simulate); } else { command = "cd \"" + cmdpath + "\" && " + arg + " 2>&1";; - LOGI("Actual command is: '%s'\n", command.c_str()); + LOGINFO("Actual command is: '%s'\n", command.c_str()); DataManager::SetValue("tw_terminal_command_thread", command); DataManager::SetValue("tw_terminal_state", 1); DataManager::SetValue("tw_background_thread_running", 1); op_status = pthread_create(&terminal_command, NULL, command_thread, NULL); if (op_status != 0) { - LOGE("Error starting terminal command thread, %i.\n", op_status); + LOGERR("Error starting terminal command thread, %i.\n", op_status); DataManager::SetValue("tw_terminal_state", 0); DataManager::SetValue("tw_background_thread_running", 0); operation_end(1, simulate); @@ -1006,7 +1003,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) { int op_status = 0; - LOGI("Sending kill command...\n"); + LOGINFO("Sending kill command...\n"); operation_start("KillCommand"); DataManager::SetValue("tw_operation_status", 0); DataManager::SetValue("tw_operation_state", 1); @@ -1020,12 +1017,12 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) int op_status = 0; string result; operation_start("ReinjectTWRP"); - ui_print("Injecting TWRP into boot image...\n"); + gui_print("Injecting TWRP into boot image...\n"); if (simulate) { simulate_progress_bar(); } else { TWFunc::Exec_Cmd("injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash", result); - ui_print("TWRP injection complete.\n"); + gui_print("TWRP injection complete.\n"); } operation_end(op_status, simulate); @@ -1077,7 +1074,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) theme_path = DataManager::GetSettingsStoragePath(); if (PartitionManager.Mount_By_Path(theme_path.c_str(), 1) < 0) { - LOGE("Unable to mount %s during reload function startup.\n", theme_path.c_str()); + LOGERR("Unable to mount %s during reload function startup.\n", theme_path.c_str()); check = 1; } @@ -1086,10 +1083,10 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (PageManager::ReloadPackage("TWRP", theme_path) != 0) { // Loading the custom theme failed - try loading the stock theme - LOGI("Attempting to reload stock theme...\n"); + LOGINFO("Attempting to reload stock theme...\n"); if (PageManager::ReloadPackage("TWRP", "/res/ui.xml")) { - LOGE("Failed to load base packages.\n"); + LOGERR("Failed to load base packages.\n"); } } } @@ -1121,20 +1118,23 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (TWFunc::Path_Exists(Sideload_File)) { unlink(Sideload_File.c_str()); } - ui_print("Starting ADB sideload feature...\n"); + gui_print("Starting ADB sideload feature...\n"); DataManager::GetValue("tw_wipe_dalvik", wipe_dalvik); - ret = apply_from_adb(ui, &wipe_cache, Sideload_File.c_str()); + ret = apply_from_adb(Sideload_File.c_str()); + DataManager::SetValue("tw_has_cancel", 0); // Remove cancel button from gui now that the zip install is going to start if (ret != 0) { ret = 1; // failure - } else { + } else if (TWinstall_zip(Sideload_File.c_str(), &wipe_cache) == 0) { if (wipe_cache || DataManager::GetIntValue("tw_wipe_cache")) PartitionManager.Wipe_By_Path("/cache"); if (wipe_dalvik) PartitionManager.Wipe_Dalvik_Cache(); + } else { + ret = 1; // failure } if (DataManager::GetIntValue(TW_HAS_INJECTTWRP) == 1 && DataManager::GetIntValue(TW_INJECT_AFTER_ZIP) == 1) { operation_start("ReinjectTWRP"); - ui_print("Injecting TWRP into boot image...\n"); + gui_print("Injecting TWRP into boot image...\n"); if (simulate) { simulate_progress_bar(); } else { @@ -1145,7 +1145,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) string injectcmd = "injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash bd=" + Boot->Actual_Block_Device; TWFunc::Exec_Cmd(injectcmd, result); } - ui_print("TWRP injection complete.\n"); + gui_print("TWRP injection complete.\n"); } } } @@ -1155,11 +1155,17 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) if (function == "adbsideloadcancel") { int child_pid; + char child_prop[PROPERTY_VALUE_MAX]; string Sideload_File; Sideload_File = DataManager::GetCurrentStoragePath() + "/sideload.zip"; unlink(Sideload_File.c_str()); - DataManager::GetValue("tw_child_pid", child_pid); - ui_print("Cancelling ADB sideload...\n"); + property_get("tw_child_pid", child_prop, "error"); + if (strcmp(child_prop, "error") == 0) { + LOGERR("Unable to get child ID from prop\n"); + return 0; + } + child_pid = atoi(child_prop); + gui_print("Cancelling ADB sideload...\n"); kill(child_pid, SIGTERM); DataManager::SetValue("tw_page_done", "1"); // For OpenRecoveryScript support return 0; @@ -1174,14 +1180,14 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) // Run those first. int reboot = 0; if (TWFunc::Path_Exists(SCRIPT_FILE_TMP)) { - ui_print("Processing AOSP recovery commands...\n"); + gui_print("Processing AOSP recovery commands...\n"); if (OpenRecoveryScript::run_script_file() == 0) { reboot = 1; } } // Check for the ORS file in /cache and attempt to run those commands. if (OpenRecoveryScript::check_for_script_file()) { - ui_print("Processing OpenRecoveryScript file...\n"); + gui_print("Processing OpenRecoveryScript file...\n"); if (OpenRecoveryScript::run_script_file() == 0) { reboot = 1; } @@ -1263,7 +1269,7 @@ void* GUIAction::command_thread(void *cookie) DataManager::GetValue("tw_terminal_command_thread", command); fp = popen(command.c_str(), "r"); if (fp == NULL) { - LOGE("Error opening command to run.\n"); + LOGERR("Error opening command to run.\n"); } else { int fd = fileno(fp), has_data = 0, check = 0, keep_going = -1, bytes_read = 0; struct timeval timeout; @@ -1290,7 +1296,7 @@ void* GUIAction::command_thread(void *cookie) memset(line, 0, sizeof(line)); bytes_read = read(fd, line, sizeof(line)); if (bytes_read > 0) - ui_print("%s", line); // Display output + gui_print("%s", line); // Display output else keep_going = 0; // Done executing } diff --git a/gui/animation.cpp b/gui/animation.cpp index 3021f467b..77d7b54ad 100644 --- a/gui/animation.cpp +++ b/gui/animation.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp index 17cc0b3d1..700a9ad27 100644 --- a/gui/blanktimer.cpp +++ b/gui/blanktimer.cpp @@ -39,8 +39,7 @@ extern "C" { #include "blanktimer.hpp" #include "../data.hpp" extern "C" { -#include "../common.h" -#include "../recovery_ui.h" +#include "../twcommon.h" } #include "../twrp-functions.hpp" #include "../variables.h" @@ -140,7 +139,7 @@ void blanktimer::resetTimerAndUnblank(void) { case 3: #ifndef TW_NO_SCREEN_BLANK if (gr_fb_blank(0) < 0) { - LOGI("blanktimer::resetTimerAndUnblank failed to gr_fb_blank(0)\n"); + LOGINFO("blanktimer::resetTimerAndUnblank failed to gr_fb_blank(0)\n"); break; } #endif diff --git a/gui/button.cpp b/gui/button.cpp index 5ba8182a1..af7d07b8f 100644 --- a/gui/button.cpp +++ b/gui/button.cpp @@ -34,9 +34,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -87,7 +86,7 @@ GUIButton::GUIButton(xml_node<>* node) } } if (!hasFill && mButtonImg == NULL) { - LOGE("No image resource or fill specified for button.\n"); + LOGERR("No image resource or fill specified for button.\n"); } // The icon is a special case diff --git a/gui/checkbox.cpp b/gui/checkbox.cpp index e52b58942..077d5e2dc 100644 --- a/gui/checkbox.cpp +++ b/gui/checkbox.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" diff --git a/gui/conditional.cpp b/gui/conditional.cpp index 4e8a49270..b3aba2d0c 100644 --- a/gui/conditional.cpp +++ b/gui/conditional.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" #include "../variables.h" } diff --git a/gui/console.cpp b/gui/console.cpp index 7631e4336..8a7a85ea3 100644 --- a/gui/console.cpp +++ b/gui/console.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp index d2be865b3..539bba096 100644 --- a/gui/fileselector.cpp +++ b/gui/fileselector.cpp @@ -38,10 +38,8 @@ #include extern "C" { -#include "../common.h" -#include "../roots.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -945,7 +943,7 @@ int GUIFileSelector::GetFileList(const std::string folder) d = opendir(folder.c_str()); if (d == NULL) { - LOGI("Unable to open '%s'\n", folder.c_str()); + LOGINFO("Unable to open '%s'\n", folder.c_str()); if (folder != "/" && (mShowNavFolders != 0 || mShowFiles != 0)) { size_t found; found = folder.find_last_of('/'); diff --git a/gui/fill.cpp b/gui/fill.cpp index 11b700fc5..901eee140 100644 --- a/gui/fill.cpp +++ b/gui/fill.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -36,7 +35,7 @@ GUIFill::GUIFill(xml_node<>* node) attr = node->first_attribute("color"); if (!attr) { - LOGE("No color specified for fill\n"); + LOGERR("No color specified for fill\n"); return; } diff --git a/gui/gui.cpp b/gui/gui.cpp index f08d68be3..4c7bf5b23 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -35,10 +35,8 @@ extern "C" { -#include "../common.h" -#include "../roots.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" #include "../minzip/Zip.h" #include } @@ -217,7 +215,7 @@ input_thread (void *cookie) touch_repeat = 1; gettimeofday (&touchStart, NULL); #ifdef _EVENT_LOGGING - LOGE ("TOUCH_HOLD: %d,%d\n", x, y); + LOGERR("TOUCH_HOLD: %d,%d\n", x, y); #endif PageManager::NotifyTouch (TOUCH_HOLD, x, y); blankTimer.resetTimerAndUnblank(); @@ -225,7 +223,7 @@ input_thread (void *cookie) else if (touch_repeat && mtime > 100) { #ifdef _EVENT_LOGGING - LOGE ("TOUCH_REPEAT: %d,%d\n", x, y); + LOGERR("TOUCH_REPEAT: %d,%d\n", x, y); #endif gettimeofday (&touchStart, NULL); PageManager::NotifyTouch (TOUCH_REPEAT, x, y); @@ -234,7 +232,7 @@ input_thread (void *cookie) else if (key_repeat == 1 && mtime > 500) { #ifdef _EVENT_LOGGING - LOGE ("KEY_HOLD: %d,%d\n", x, y); + LOGERR("KEY_HOLD: %d,%d\n", x, y); #endif gettimeofday (&touchStart, NULL); key_repeat = 2; @@ -244,7 +242,7 @@ input_thread (void *cookie) else if (key_repeat == 2 && mtime > 100) { #ifdef _EVENT_LOGGING - LOGE ("KEY_REPEAT: %d,%d\n", x, y); + LOGERR("KEY_REPEAT: %d,%d\n", x, y); #endif gettimeofday (&touchStart, NULL); kb.KeyRepeat (); @@ -262,7 +260,7 @@ input_thread (void *cookie) if (state == 0) { #ifdef _EVENT_LOGGING - LOGE ("TOUCH_RELEASE: %d,%d\n", x, y); + LOGERR("TOUCH_RELEASE: %d,%d\n", x, y); #endif PageManager::NotifyTouch (TOUCH_RELEASE, x, y); blankTimer.resetTimerAndUnblank(); @@ -279,7 +277,7 @@ input_thread (void *cookie) if (!drag) { #ifdef _EVENT_LOGGING - LOGE ("TOUCH_START: %d,%d\n", x, y); + LOGERR("TOUCH_START: %d,%d\n", x, y); #endif if (PageManager::NotifyTouch (TOUCH_START, x, y) > 0) state = 1; @@ -295,7 +293,7 @@ input_thread (void *cookie) if (state == 0) { #ifdef _EVENT_LOGGING - LOGE ("TOUCH_DRAG: %d,%d\n", x, y); + LOGERR("TOUCH_DRAG: %d,%d\n", x, y); #endif if (PageManager::NotifyTouch (TOUCH_DRAG, x, y) > 0) state = 1; @@ -309,7 +307,7 @@ input_thread (void *cookie) { // Handle key-press here #ifdef _EVENT_LOGGING - LOGE ("TOUCH_KEY: %d\n", ev.code); + LOGERR("TOUCH_KEY: %d\n", ev.code); #endif if (ev.value != 0) { @@ -502,7 +500,7 @@ gui_forceRender (void) int gui_changePage (std::string newPage) { - LOGI ("Set page: '%s'\n", newPage.c_str ()); + LOGINFO("Set page: '%s'\n", newPage.c_str ()); PageManager::ChangePage (newPage); pthread_mutex_lock(&gForceRendermutex); gForceRender = 1; @@ -600,41 +598,41 @@ gui_loadResources () { if (PageManager::LoadPackage ("TWRP", "/res/ui.xml", "decrypt")) { - LOGE ("Failed to load base packages.\n"); + LOGERR("Failed to load base packages.\n"); goto error; } else check = 1; } if (check == 0 - && PageManager::LoadPackage ("TWRP", "/script/ui.xml", "main")) + && PageManager::LoadPackage("TWRP", "/script/ui.xml", "main")) { std::string theme_path; theme_path = DataManager::GetSettingsStoragePath (); - if (!PartitionManager.Mount_Settings_Storage (false)) + if (!PartitionManager.Mount_Settings_Storage(false)) { int retry_count = 5; while (retry_count > 0 - && !PartitionManager.Mount_Settings_Storage (false)) + && !PartitionManager.Mount_Settings_Storage(false)) { usleep (500000); retry_count--; } - if (!PartitionManager.Mount_Settings_Storage (false)) + if (!PartitionManager.Mount_Settings_Storage(false)) { - LOGE ("Unable to mount %s during GUI startup.\n", + LOGERR("Unable to mount %s during GUI startup.\n", theme_path.c_str ()); check = 1; } } theme_path += "/TWRP/theme/ui.zip"; - if (check || PageManager::LoadPackage ("TWRP", theme_path, "main")) + if (check || PageManager::LoadPackage("TWRP", theme_path, "main")) { - if (PageManager::LoadPackage ("TWRP", "/res/ui.xml", "main")) + if (PageManager::LoadPackage("TWRP", "/res/ui.xml", "main")) { - LOGE ("Failed to load base packages.\n"); + LOGERR("Failed to load base packages.\n"); goto error; } } @@ -647,7 +645,7 @@ gui_loadResources () return 0; error: - LOGE ("An internal error has occurred.\n"); + LOGERR("An internal error has occurred.\n"); gGuiInitialized = 0; return -1; } @@ -687,7 +685,7 @@ gui_startPage (const char *page_name) loopTimer (); // Set the default package - PageManager::SelectPackage ("TWRP"); + PageManager::SelectPackage("TWRP"); if (!gGuiInputRunning) { @@ -697,7 +695,7 @@ gui_startPage (const char *page_name) gGuiInputRunning = 1; } - DataManager::SetValue ("tw_page_done", 0); + DataManager::SetValue("tw_page_done", 0); return runPage (page_name); } @@ -722,7 +720,7 @@ console_thread (void *cookie) flip (); if (ret < 0) - LOGE ("An update request has failed.\n"); + LOGERR("An update request has failed.\n"); } else { diff --git a/gui/hardwarekeyboard.cpp b/gui/hardwarekeyboard.cpp index 39b02cc17..96958d50a 100644 --- a/gui/hardwarekeyboard.cpp +++ b/gui/hardwarekeyboard.cpp @@ -19,9 +19,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -37,7 +36,7 @@ HardwareKeyboard::~HardwareKeyboard() { int HardwareKeyboard::KeyDown(int key_code) { #ifdef _EVENT_LOGGING - LOGE("HardwareKeyboard::KeyDown %i\n", key_code); + LOGERR("HardwareKeyboard::KeyDown %i\n", key_code); #endif PageManager::NotifyKey(key_code); return 0; // 0 = no key repeat anything else turns on key repeat @@ -45,14 +44,14 @@ int HardwareKeyboard::KeyDown(int key_code) { int HardwareKeyboard::KeyUp(int key_code) { #ifdef _EVENT_LOGGING - LOGE("HardwareKeyboard::KeyUp %i\n", key_code); + LOGERR("HardwareKeyboard::KeyUp %i\n", key_code); #endif return 0; } int HardwareKeyboard::KeyRepeat(void) { #ifdef _EVENT_LOGGING - LOGE("HardwareKeyboard::KeyRepeat\n"); + LOGERR("HardwareKeyboard::KeyRepeat\n"); #endif return 0; } diff --git a/gui/image.cpp b/gui/image.cpp index 05e517867..c684d1b53 100644 --- a/gui/image.cpp +++ b/gui/image.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" diff --git a/gui/input.cpp b/gui/input.cpp index 2418c4c41..e0167244d 100644 --- a/gui/input.cpp +++ b/gui/input.cpp @@ -20,9 +20,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -300,7 +299,7 @@ int GUIInput::HandleTextLocation(int x) } } } else - LOGI("GUIInput::HandleTextLocation -> We really shouldn't ever get here...\n"); + LOGINFO("GUIInput::HandleTextLocation -> We really shouldn't ever get here...\n"); } else if (x > lastX) { // Dragging to right, scrolling left while (-1) { diff --git a/gui/keyboard.cpp b/gui/keyboard.cpp index b74ff561a..7b6d006fa 100644 --- a/gui/keyboard.cpp +++ b/gui/keyboard.cpp @@ -38,9 +38,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -116,7 +115,7 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) while (keylayout) { if (layoutindex > MAX_KEYBOARD_LAYOUTS) { - LOGE("Too many layouts defined in keyboard.\n"); + LOGERR("Too many layouts defined in keyboard.\n"); return; } @@ -141,7 +140,7 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) while (keyrow) { if (rowindex > MAX_KEYBOARD_ROWS) { - LOGE("Too many rows defined in keyboard.\n"); + LOGERR("Too many rows defined in keyboard.\n"); return; } @@ -158,20 +157,20 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) char keyinfo[255]; if (keyindex > MAX_KEYBOARD_KEYS) { - LOGE("Too many keys defined in a keyboard row.\n"); + LOGERR("Too many keys defined in a keyboard row.\n"); return; } stratt = attr->value(); if (strlen(stratt.c_str()) >= 255) { - LOGE("Key info on layout%i, row%i, key%dd is too long.\n", layoutindex, rowindex, keyindex); + LOGERR("Key info on layout%i, row%i, key%dd is too long.\n", layoutindex, rowindex, keyindex); return; } strcpy(keyinfo, stratt.c_str()); if (strlen(keyinfo) == 0) { - LOGE("No key info on layout%i, row%i, key%dd.\n", layoutindex, rowindex, keyindex); + LOGERR("No key info on layout%i, row%i, key%dd.\n", layoutindex, rowindex, keyindex); return; } @@ -220,7 +219,7 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) // This is an action keyboard_keys[layoutindex - 1][rowindex - 1][keyindex - 1].key = KEYBOARD_ACTION; } else - LOGE("Invalid key info on layout%i, row%i, key%02i.\n", layoutindex, rowindex, keyindex); + LOGERR("Invalid key info on layout%i, row%i, key%02i.\n", layoutindex, rowindex, keyindex); } // PROCESS LONG PRESS INFO IF EXISTS @@ -229,14 +228,14 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) if (attr) { stratt = attr->value(); if (strlen(stratt.c_str()) >= 255) { - LOGE("Key info on layout%i, row%i, key%dd is too long.\n", layoutindex, rowindex, keyindex); + LOGERR("Key info on layout%i, row%i, key%dd is too long.\n", layoutindex, rowindex, keyindex); return; } strcpy(keyinfo, stratt.c_str()); if (strlen(keyinfo) == 0) { - LOGE("No long press info on layout%i, row%i, long%dd.\n", layoutindex, rowindex, keyindex); + LOGERR("No long press info on layout%i, row%i, long%dd.\n", layoutindex, rowindex, keyindex); return; } @@ -282,7 +281,7 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) // This is an action keyboard_keys[layoutindex - 1][rowindex - 1][keyindex - 1].longpresskey = KEYBOARD_ACTION; } else - LOGE("Invalid long press key info on layout%i, row%i, long%02i.\n", layoutindex, rowindex, keyindex); + LOGERR("Invalid long press key info on layout%i, row%i, long%02i.\n", layoutindex, rowindex, keyindex); } } keyindex++; diff --git a/gui/listbox.cpp b/gui/listbox.cpp index 910a6a399..3af40ed5b 100644 --- a/gui/listbox.cpp +++ b/gui/listbox.cpp @@ -38,10 +38,8 @@ #include extern "C" { -#include "../common.h" -#include "../roots.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" diff --git a/gui/pages.cpp b/gui/pages.cpp index 40de44f79..bf44b3856 100644 --- a/gui/pages.cpp +++ b/gui/pages.cpp @@ -35,9 +35,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -171,11 +170,11 @@ Page::Page(xml_node<>* page, xml_node<>* templates /* = NULL */) mName = page->first_attribute("name")->value(); else { - LOGE("No page name attribute found!\n"); + LOGERR("No page name attribute found!\n"); return; } - LOGI("Loading page %s\n", mName.c_str()); + LOGINFO("Loading page %s\n", mName.c_str()); // This is a recursive routine for template handling ProcessNode(page, templates); @@ -187,7 +186,7 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int { if (depth == 10) { - LOGE("Page processing depth has exceeded 10. Failing out. This is likely a recursive template.\n"); + LOGERR("Page processing depth has exceeded 10. Failing out. This is likely a recursive template.\n"); return false; } @@ -303,7 +302,7 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int { if (!templates || !child->first_attribute("name")) { - LOGE("Invalid template request.\n"); + LOGERR("Invalid template request.\n"); } else { @@ -331,7 +330,7 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int } else { - LOGE("Unknown object type.\n"); + LOGERR("Unknown object type.\n"); } child = child->next_sibling("object"); } @@ -349,7 +348,7 @@ int Page::Render(void) for (iter = mRenders.begin(); iter != mRenders.end(); iter++) { if ((*iter)->Render()) - LOGE("A render request has failed.\n"); + LOGERR("A render request has failed.\n"); } return 0; } @@ -363,7 +362,7 @@ int Page::Update(void) { int ret = (*iter)->Update(); if (ret < 0) - LOGE("An update request has failed.\n"); + LOGERR("An update request has failed.\n"); else if (ret > retCode) retCode = ret; } @@ -421,7 +420,7 @@ int Page::NotifyKey(int key) if (ret == 0) return 0; else if (ret < 0) - LOGE("An action handler has returned an error"); + LOGERR("An action handler has returned an error"); } return 1; } @@ -440,7 +439,7 @@ int Page::NotifyKeyboard(int key) if (ret == 0) return 0; else if (ret < 0) - LOGE("A keyboard handler has returned an error"); + LOGERR("A keyboard handler has returned an error"); } return 1; } @@ -459,7 +458,7 @@ int Page::SetKeyBoardFocus(int inFocus) if (ret == 0) return 0; else if (ret < 0) - LOGE("An input focus handler has returned an error"); + LOGERR("An input focus handler has returned an error"); } return 1; } @@ -485,7 +484,7 @@ int Page::NotifyVarChange(std::string varName, std::string value) for (iter = mActions.begin(); iter != mActions.end(); ++iter) { if ((*iter)->NotifyVarChange(varName, value)) - LOGE("An action handler errored on NotifyVarChange.\n"); + LOGERR("An action handler errored on NotifyVarChange.\n"); } return 0; } @@ -520,17 +519,17 @@ int PageSet::Load(ZipArchive* package) parent = mDoc.first_node("install"); // Now, let's parse the XML - LOGI("Loading resources...\n"); + LOGINFO("Loading resources...\n"); child = parent->first_node("resources"); if (child) mResources = new ResourceManager(child, package); - LOGI("Loading variables...\n"); + LOGINFO("Loading variables...\n"); child = parent->first_node("variables"); if (child) LoadVariables(child); - LOGI("Loading pages...\n"); + LOGINFO("Loading pages...\n"); // This may be NULL if no templates are present templates = parent->first_node("templates"); @@ -554,7 +553,7 @@ int PageSet::SetPage(std::string page) } else { - LOGE("Unable to locate page (%s)\n", page.c_str()); + LOGERR("Unable to locate page (%s)\n", page.c_str()); } return -1; } @@ -618,7 +617,7 @@ int PageSet::LoadPages(xml_node<>* pages, xml_node<>* templates /* = NULL */) Page* page = new Page(child, templates); if (page->GetName().empty()) { - LOGE("Unable to process load page\n"); + LOGERR("Unable to process load page\n"); delete page; } else @@ -697,7 +696,7 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string int ret; // Open the XML file - LOGI("Loading package: %s (%s)\n", name.c_str(), package.c_str()); + LOGINFO("Loading package: %s (%s)\n", name.c_str(), package.c_str()); if (mzOpenZipArchive(package.c_str(), &zip)) { // We can try to load the XML directly... @@ -721,7 +720,7 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string const ZipEntry* ui_xml = mzFindZipEntry(&zip, "ui.xml"); if (ui_xml == NULL) { - LOGE("Unable to locate ui.xml in zip file\n"); + LOGERR("Unable to locate ui.xml in zip file\n"); goto error; } @@ -732,7 +731,7 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string if (!mzExtractZipEntryToBuffer(&zip, ui_xml, (unsigned char*) xmlFile)) { - LOGE("Unable to extract ui.xml\n"); + LOGERR("Unable to extract ui.xml\n"); goto error; } } @@ -752,7 +751,7 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string } else { - LOGE("Package %s failed to load.\n", name.c_str()); + LOGERR("Package %s failed to load.\n", name.c_str()); } // The first successful package we loaded is the base @@ -765,7 +764,7 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string return ret; error: - LOGE("An internal error has occurred.\n"); + LOGERR("An internal error has occurred.\n"); if (pZip) mzCloseZipArchive(pZip); if (xmlFile) free(xmlFile); return -1; @@ -780,20 +779,20 @@ PageSet* PageManager::FindPackage(std::string name) { return (*iter).second; } - LOGE("Unable to locate package %s\n", name.c_str()); + LOGERR("Unable to locate package %s\n", name.c_str()); return NULL; } PageSet* PageManager::SelectPackage(std::string name) { - LOGI("Switching packages (%s)\n", name.c_str()); + LOGINFO("Switching packages (%s)\n", name.c_str()); PageSet* tmp; tmp = FindPackage(name); if (tmp) mCurrentSet = tmp; else - LOGE("Unable to find package.\n"); + LOGERR("Unable to find package.\n"); return mCurrentSet; } @@ -811,7 +810,7 @@ int PageManager::ReloadPackage(std::string name, std::string package) if (LoadPackage(name, package, "main") != 0) { - LOGE("Failed to load package.\n"); + LOGERR("Failed to load package.\n"); mPageSets.insert(std::pair(name, set)); return -1; } diff --git a/gui/partitionlist.cpp b/gui/partitionlist.cpp index 9f9321c0b..36d5c1609 100644 --- a/gui/partitionlist.cpp +++ b/gui/partitionlist.cpp @@ -38,10 +38,8 @@ #include extern "C" { -#include "../common.h" -#include "../roots.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -330,12 +328,12 @@ GUIPartitionList::GUIPartitionList(xml_node<>* node) PartitionManager.Get_Partition_List(ListType, &mList); } else { mList.clear(); - LOGE("No partition listtype name specified for partitionlist GUI element\n"); + LOGERR("No partition listtype name specified for partitionlist GUI element\n"); return; } } else { mList.clear(); - LOGE("No partition listtype specified for partitionlist GUI element\n"); + LOGERR("No partition listtype specified for partitionlist GUI element\n"); return; } } @@ -755,7 +753,7 @@ int GUIPartitionList::NotifyTouch(TOUCH_STATE state, int x, int y) bool update_size = false; TWPartition* Part = PartitionManager.Find_Partition_By_Path(str); if (Part == NULL) { - LOGE("Unable to locate partition for '%s'\n", str.c_str()); + LOGERR("Unable to locate partition for '%s'\n", str.c_str()); return 0; } if (!Part->Is_Mounted() && Part->Removable) diff --git a/gui/progressbar.cpp b/gui/progressbar.cpp index e0e9c517e..dce431508 100644 --- a/gui/progressbar.cpp +++ b/gui/progressbar.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -39,7 +38,7 @@ GUIProgressBar::GUIProgressBar(xml_node<>* node) if (!node) { - LOGE("GUIProgressBar created without XML node\n"); + LOGERR("GUIProgressBar created without XML node\n"); return; } diff --git a/gui/resources.cpp b/gui/resources.cpp index 2f2ea95b0..aaa153303 100644 --- a/gui/resources.cpp +++ b/gui/resources.cpp @@ -21,9 +21,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -207,9 +206,9 @@ ResourceManager::ResourceManager(xml_node<>* resList, ZipArchive* pZip) if (!attr_name) { std::string res_name = attr_name->value(); - LOGE("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); + LOGERR("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); } else - LOGE("Resource type (%s) failed to load\n", type.c_str()); + LOGERR("Resource type (%s) failed to load\n", type.c_str()); delete res; } @@ -227,9 +226,9 @@ ResourceManager::ResourceManager(xml_node<>* resList, ZipArchive* pZip) if (!attr_name) { std::string res_name = attr_name->value(); - LOGE("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); + LOGERR("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); } else - LOGE("Resource type (%s) failed to load\n", type.c_str()); + LOGERR("Resource type (%s) failed to load\n", type.c_str()); delete res; } @@ -247,9 +246,9 @@ ResourceManager::ResourceManager(xml_node<>* resList, ZipArchive* pZip) if (!attr_name) { std::string res_name = attr_name->value(); - LOGE("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); + LOGERR("Resource (%s)-(%s) failed to load\n", type.c_str(), res_name.c_str()); } else - LOGE("Resource type (%s) failed to load\n", type.c_str()); + LOGERR("Resource type (%s) failed to load\n", type.c_str()); delete res; } @@ -260,7 +259,7 @@ ResourceManager::ResourceManager(xml_node<>* resList, ZipArchive* pZip) } else { - LOGE("Resource type (%s) not supported.\n", type.c_str()); + LOGERR("Resource type (%s) not supported.\n", type.c_str()); } child = child->next_sibling("resource"); diff --git a/gui/slider.cpp b/gui/slider.cpp index 95962c09b..4542d60e1 100644 --- a/gui/slider.cpp +++ b/gui/slider.cpp @@ -19,9 +19,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" @@ -40,7 +39,7 @@ GUISlider::GUISlider(xml_node<>* node) if (!node) { - LOGE("GUISlider created without XML node\n"); + LOGERR("GUISlider created without XML node\n"); return; } @@ -74,7 +73,7 @@ GUISlider::GUISlider(xml_node<>* node) sTouchH = gr_get_height(sTouch->GetResource()); // Height of the "touch image" that follows the touch (arrow) } - //LOGI("mRenderW: %i mTouchW: %i\n", mRenderW, mTouchW); + //LOGINFO("mRenderW: %i mTouchW: %i\n", mRenderW, mTouchW); mActionX = mRenderX; mActionY = mRenderY; mActionW = mRenderW; diff --git a/gui/text.cpp b/gui/text.cpp index 1eceab1f5..46a6622e2 100644 --- a/gui/text.cpp +++ b/gui/text.cpp @@ -18,9 +18,8 @@ #include extern "C" { -#include "../common.h" +#include "../twcommon.h" #include "../minuitwrp/minui.h" -#include "../recovery_ui.h" } #include "rapidxml.hpp" diff --git a/install.cpp b/install.cpp index 4d73aa9b0..92388e8f3 100644 --- a/install.cpp +++ b/install.cpp @@ -188,7 +188,7 @@ try_update_binary(const char *path, ZipArchive *zip, int* wipe_cache) { // commas. The last key must not be followed by a comma. // // Returns NULL if the file failed to parse, or if it contain zero keys. -static RSAPublicKey* +RSAPublicKey* load_keys(const char* filename, int* numKeys) { RSAPublicKey* out = NULL; *numKeys = 0; diff --git a/install.h b/install.h index 1943f02d3..5829c6516 100644 --- a/install.h +++ b/install.h @@ -18,6 +18,7 @@ #define RECOVERY_INSTALL_H_ #include "common.h" +#include "mincrypt/rsa.h" #ifdef __cplusplus extern "C" { @@ -29,6 +30,7 @@ enum { INSTALL_SUCCESS, INSTALL_ERROR, INSTALL_CORRUPT }; // cache partition. int install_package(const char *root_path, int* wipe_cache, const char* install_file); +RSAPublicKey* load_keys(const char* filename, int* numKeys); #ifdef __cplusplus } diff --git a/libjpegtwrp/Android.mk b/libjpegtwrp/Android.mk index de852cb03..98b253958 100755 --- a/libjpegtwrp/Android.mk +++ b/libjpegtwrp/Android.mk @@ -69,11 +69,9 @@ asm_flags := \ LOCAL_CFLAGS+= \ $(foreach f,$(asm_flags),-Wa,"$(f)") endif - +LOCAL_MODULE_TAGS := eng +LOCAL_SHARED_LIBRARIES += libcutils LOCAL_MODULE:= libjpegtwrp -LOCAL_SHARED_LIBRARIES := \ - libcutils - include $(BUILD_STATIC_LIBRARY) diff --git a/minadbd/Android.mk b/minadbd/Android.mk index 5a4de6828..c08fd46b0 100644 --- a/minadbd/Android.mk +++ b/minadbd/Android.mk @@ -18,15 +18,16 @@ LOCAL_SRC_FILES := \ sockets.c \ services.c \ usb_linux_client.c \ - utils.c + utils.c \ + ../../../system/core/adb/transport_local.c LOCAL_CFLAGS := -O2 -g -DADB_HOST=0 -Wall -Wno-unused-parameter LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE - +LOCAL_MODULE_TAGS := eng LOCAL_MODULE := libminadbd -LOCAL_STATIC_LIBRARIES := libcutils libc -include $(BUILD_STATIC_LIBRARY) +LOCAL_SHARED_LIBRARIES := libcutils libc +include $(BUILD_SHARED_LIBRARY) diff --git a/minuitwrp/Android.mk b/minuitwrp/Android.mk index f0c708927..59ca2ccc5 100644 --- a/minuitwrp/Android.mk +++ b/minuitwrp/Android.mk @@ -1,7 +1,9 @@ LOCAL_PATH := $(call my-dir) + include $(CLEAR_VARS) LOCAL_SRC_FILES := events.c resources.c +#LOCAL_SRC_FILES := $(TARGET_OUT_SHARED_LIBRARIES)/libjpegtwrp.so $(TARGET_OUT_SHARED_LIBRARIES)/libpng.so $(TARGET_OUT_SHARED_LIBRARIES)/libpixelflinger.so ifneq ($(TW_BOARD_CUSTOM_GRAPHICS),) LOCAL_SRC_FILES += $(TW_BOARD_CUSTOM_GRAPHICS) @@ -9,11 +11,13 @@ else LOCAL_SRC_FILES += graphics.c endif -LOCAL_C_INCLUDES +=\ - external/libpng\ - external/zlib\ - external/jpeg +LOCAL_C_INCLUDES += \ + external/libpng \ + external/zlib \ + system/core/include +LOCAL_C_INCLUDES += \ + bootable/recovery/libjpegtwrp ifeq ($(RECOVERY_TOUCHSCREEN_SWAP_XY), true) LOCAL_CFLAGS += -DRECOVERY_TOUCHSCREEN_SWAP_XY @@ -54,7 +58,9 @@ endif ifneq ($(BOARD_USE_CUSTOM_RECOVERY_FONT),) LOCAL_CFLAGS += -DBOARD_USE_CUSTOM_RECOVERY_FONT=$(BOARD_USE_CUSTOM_RECOVERY_FONT) endif -LOCAL_STATIC_LIBRARY := libpng +LOCAL_SHARED_LIBRARIES += libz libpixelflinger libc libcutils +LOCAL_STATIC_LIBRARIES += libpng libjpegtwrp +LOCAL_MODULE_TAGS := eng LOCAL_MODULE := libminuitwrp -include $(BUILD_STATIC_LIBRARY) +include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/minuitwrp/events.c b/minuitwrp/events.c index 285b5b6e7..73c4066aa 100644 --- a/minuitwrp/events.c +++ b/minuitwrp/events.c @@ -152,11 +152,11 @@ static int vk_init(struct ev *e) len = ioctl(e->fd->fd, EVIOCGNAME(sizeof(e->deviceName)), e->deviceName); if (len <= 0) { - LOGE("Unable to query event object.\n"); + printf("Unable to query event object.\n"); return -1; } #ifdef _EVENT_LOGGING - LOGI("Event object: %s\n", e->deviceName); + printf("Event object: %s\n", e->deviceName); #endif // Blacklist these "input" devices @@ -188,7 +188,7 @@ static int vk_init(struct ev *e) } if (e->vk_count % 6) { - LOGW("minui: %s is %d %% 6\n", vk_path, e->vk_count % 6); + printf("minui: %s is %d %% 6\n", vk_path, e->vk_count % 6); } e->vk_count /= 6; if (e->vk_count <= 0) @@ -201,14 +201,14 @@ static int vk_init(struct ev *e) ioctl(e->fd->fd, EVIOCGABS(ABS_Y), &e->p.yi); e->p.synced = 0; #ifdef _EVENT_LOGGING - LOGI("EV: ST minX: %d maxX: %d minY: %d maxY: %d\n", e->p.xi.minimum, e->p.xi.maximum, e->p.yi.minimum, e->p.yi.maximum); + printf("EV: ST minX: %d maxX: %d minY: %d maxY: %d\n", e->p.xi.minimum, e->p.xi.maximum, e->p.yi.minimum, e->p.yi.maximum); #endif ioctl(e->fd->fd, EVIOCGABS(ABS_MT_POSITION_X), &e->mt_p.xi); ioctl(e->fd->fd, EVIOCGABS(ABS_MT_POSITION_Y), &e->mt_p.yi); e->mt_p.synced = 0; #ifdef _EVENT_LOGGING - LOGI("EV: MT minX: %d maxX: %d minY: %d maxY: %d\n", e->mt_p.xi.minimum, e->mt_p.xi.maximum, e->mt_p.yi.minimum, e->mt_p.yi.maximum); + printf("EV: MT minX: %d maxX: %d minY: %d maxY: %d\n", e->mt_p.xi.minimum, e->mt_p.xi.maximum, e->mt_p.yi.minimum, e->mt_p.yi.maximum); #endif e->vks = malloc(sizeof(*e->vks) * e->vk_count); @@ -223,7 +223,7 @@ static int vk_init(struct ev *e) if (strcmp(token[0], "0x01") != 0) { /* Java does string compare, so we do too. */ - LOGW("minui: %s: ignoring unknown virtual key type %s\n", vk_path, token[0]); + printf("minui: %s: ignoring unknown virtual key type %s\n", vk_path, token[0]); continue; } @@ -299,7 +299,7 @@ static int vk_tp_to_screen(struct position *p, int *x, int *y) } #ifdef _EVENT_LOGGING - LOGI("EV: p->x=%d x-range=%d,%d fb-width=%d\n", p->x, p->xi.minimum, p->xi.maximum, gr_fb_width()); + printf("EV: p->x=%d x-range=%d,%d fb-width=%d\n", p->x, p->xi.minimum, p->xi.maximum, gr_fb_width()); #endif #ifndef RECOVERY_TOUCHSCREEN_SWAP_XY @@ -341,14 +341,14 @@ static int vk_modify(struct ev *e, struct input_event *ev) { // This appears to be an accelerometer or another strange input device. It's not the touchscreen. #ifdef _EVENT_LOGGING - LOGI("EV: Device disabled due to non-touchscreen messages.\n"); + printf("EV: Device disabled due to non-touchscreen messages.\n"); #endif e->ignored = 1; return 1; } #ifdef _EVENT_LOGGING - LOGI("EV: %s => type: %x code: %x value: %d\n", e->deviceName, ev->type, ev->code, ev->value); + printf("EV: %s => type: %x code: %x value: %d\n", e->deviceName, ev->type, ev->code, ev->value); #endif // Handle keyboard events, value of 1 indicates key down, 0 indicates key up @@ -363,7 +363,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) e->p.synced |= 0x01; e->p.x = ev->value; #ifdef _EVENT_LOGGING - LOGI("EV: %s => EV_ABS ABS_X %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_X %d\n", e->deviceName, ev->value); #endif break; @@ -371,7 +371,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) e->p.synced |= 0x02; e->p.y = ev->value; #ifdef _EVENT_LOGGING - LOGI("EV: %s => EV_ABS ABS_Y %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_Y %d\n", e->deviceName, ev->value); #endif break; @@ -400,7 +400,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) touchReleaseOnNextSynReport = 1; } #ifdef _EVENT_LOGGING - LOGI("EV: %s => EV_ABS ABS_MT_TOUCH_MAJOR %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_TOUCH_MAJOR %d\n", e->deviceName, ev->value); #endif break; @@ -413,7 +413,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) touchReleaseOnNextSynReport = 1; } #ifdef _EVENT_LOGGING - LOGI("EV: %s => EV_ABS ABS_MT_PRESSURE %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_PRESSURE %d\n", e->deviceName, ev->value); #endif break; @@ -421,7 +421,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) e->mt_p.synced |= 0x01; e->mt_p.x = ev->value; #ifdef _EVENT_LOGGING - LOGI("EV: %s => EV_ABS ABS_MT_POSITION_X %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_POSITION_X %d\n", e->deviceName, ev->value); #endif break; @@ -429,29 +429,29 @@ static int vk_modify(struct ev *e, struct input_event *ev) e->mt_p.synced |= 0x02; e->mt_p.y = ev->value; #ifdef _EVENT_LOGGING - LOGI("EV: %s => EV_ABS ABS_MT_POSITION_Y %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_POSITION_Y %d\n", e->deviceName, ev->value); #endif break; #ifdef _EVENT_LOGGING // All of these items are strictly for logging purposes only. Return 1 because they don't need to be handled. case ABS_MT_TOUCH_MINOR: //31 - LOGI("EV: %s => EV_ABS ABS_MT_TOUCH_MINOR %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_TOUCH_MINOR %d\n", e->deviceName, ev->value); return 1; break; case ABS_MT_WIDTH_MAJOR: //32 - LOGI("EV: %s => EV_ABS ABS_MT_WIDTH_MAJOR %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_WIDTH_MAJOR %d\n", e->deviceName, ev->value); return 1; break; case ABS_MT_WIDTH_MINOR: //33 - LOGI("EV: %s => EV_ABS ABS_MT_WIDTH_MINOR %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_WIDTH_MINOR %d\n", e->deviceName, ev->value); return 1; break; case ABS_MT_ORIENTATION: //34 - LOGI("EV: %s => EV_ABS ABS_MT_ORIENTATION %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_ORIENTATION %d\n", e->deviceName, ev->value); return 1; break; @@ -461,17 +461,17 @@ static int vk_modify(struct ev *e, struct input_event *ev) break; case ABS_MT_BLOB_ID: //38 - LOGI("EV: %s => EV_ABS ABS_MT_BLOB_ID %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_BLOB_ID %d\n", e->deviceName, ev->value); return 1; break; case ABS_MT_TRACKING_ID: //39 - LOGI("EV: %s => EV_ABS ABS_MT_TRACKING_ID %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_TRACKING_ID %d\n", e->deviceName, ev->value); return 1; break; case ABS_MT_DISTANCE: //3b - LOGI("EV: %s => EV_ABS ABS_MT_DISTANCE %d\n", e->deviceName, ev->value); + printf("EV: %s => EV_ABS ABS_MT_DISTANCE %d\n", e->deviceName, ev->value); return 1; break; #endif @@ -496,8 +496,8 @@ static int vk_modify(struct ev *e, struct input_event *ev) } #ifdef _EVENT_LOGGING - if (ev->type == EV_SYN && ev->code == SYN_REPORT) LOGI("EV: %s => EV_SYN SYN_REPORT\n", e->deviceName); - if (ev->type == EV_SYN && ev->code == SYN_MT_REPORT) LOGI("EV: %s => EV_SYN SYN_MT_REPORT\n", e->deviceName); + if (ev->type == EV_SYN && ev->code == SYN_REPORT) printf("EV: %s => EV_SYN SYN_REPORT\n", e->deviceName); + if (ev->type == EV_SYN && ev->code == SYN_MT_REPORT) printf("EV: %s => EV_SYN SYN_MT_REPORT\n", e->deviceName); #endif // Discard the MT versions @@ -555,7 +555,7 @@ static int vk_modify(struct ev *e, struct input_event *ev) #endif #ifdef _EVENT_LOGGING - LOGI("EV: x: %d y: %d\n", x, y); + printf("EV: x: %d y: %d\n", x, y); #endif // Clear the current sync states diff --git a/minuitwrp/graphics.c b/minuitwrp/graphics.c index 61a98c3f7..627e34392 100644 --- a/minuitwrp/graphics.c +++ b/minuitwrp/graphics.c @@ -79,14 +79,14 @@ static struct fb_fix_screeninfo fi; #ifdef PRINT_SCREENINFO static void print_fb_var_screeninfo() { - LOGI("vi.xres: %d\n", vi.xres); - LOGI("vi.yres: %d\n", vi.yres); - LOGI("vi.xres_virtual: %d\n", vi.xres_virtual); - LOGI("vi.yres_virtual: %d\n", vi.yres_virtual); - LOGI("vi.xoffset: %d\n", vi.xoffset); - LOGI("vi.yoffset: %d\n", vi.yoffset); - LOGI("vi.bits_per_pixel: %d\n", vi.bits_per_pixel); - LOGI("vi.grayscale: %d\n", vi.grayscale); + printf("vi.xres: %d\n", vi.xres); + printf("vi.yres: %d\n", vi.yres); + printf("vi.xres_virtual: %d\n", vi.xres_virtual); + printf("vi.yres_virtual: %d\n", vi.yres_virtual); + printf("vi.xoffset: %d\n", vi.xoffset); + printf("vi.yoffset: %d\n", vi.yoffset); + printf("vi.bits_per_pixel: %d\n", vi.bits_per_pixel); + printf("vi.grayscale: %d\n", vi.grayscale); } #endif @@ -191,7 +191,7 @@ static int get_framebuffer(GGLSurface *fb) fb->width = vi.xres; fb->height = vi.yres; #ifdef BOARD_HAS_JANKY_BACKBUFFER - LOGI("setting JANKY BACKBUFFER\n"); + printf("setting JANKY BACKBUFFER\n"); fb->stride = fi.line_length/2; #else fb->stride = vi.xres_virtual; diff --git a/minuitwrp/resources.c b/minuitwrp/resources.c index ea6a44752..4c8d8a93f 100644 --- a/minuitwrp/resources.c +++ b/minuitwrp/resources.c @@ -30,7 +30,7 @@ #include #include -#include +#include "../libjpegtwrp/jpeglib.h" #include "minui.h" diff --git a/minzip/Android.mk b/minzip/Android.mk index 6c1d0969c..73407b770 100644 --- a/minzip/Android.mk +++ b/minzip/Android.mk @@ -21,5 +21,6 @@ endif LOCAL_MODULE := libminzip LOCAL_CFLAGS += -Wall +LOCAL_SHARED_LIBRARIES := libz -include $(BUILD_STATIC_LIBRARY) +include $(BUILD_SHARED_LIBRARY) diff --git a/mtdutils/Android.mk b/mtdutils/Android.mk index 438b3935a..8e1bdca7d 100644 --- a/mtdutils/Android.mk +++ b/mtdutils/Android.mk @@ -17,6 +17,21 @@ LOCAL_FORCE_STATIC_EXECUTABLE := true include $(BUILD_STATIC_LIBRARY) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + mtdutils.c \ + mounts.c + +ifeq ($(TARGET_BOARD_PLATFORM),rk30xx) +LOCAL_SRC_FILES += rk30hack.c +endif + +LOCAL_MODULE := libmtdutils +LOCAL_STATIC_LIBRARIES := libcutils libc + +include $(BUILD_SHARED_LIBRARY) + ifeq ($(BOARD_USES_BML_OVER_MTD),true) include $(CLEAR_VARS) LOCAL_SRC_FILES := bml_over_mtd.c diff --git a/openrecoveryscript.cpp b/openrecoveryscript.cpp index 5a23c1d4a..a842d3370 100644 --- a/openrecoveryscript.cpp +++ b/openrecoveryscript.cpp @@ -35,7 +35,7 @@ #include "twrp-functions.hpp" #include "partitions.hpp" -#include "common.h" +#include "twcommon.h" #include "openrecoveryscript.hpp" #include "variables.h" #include "adb_install.h" @@ -46,16 +46,15 @@ extern "C" { int TWinstall_zip(const char* path, int* wipe_cache); } -extern RecoveryUI* ui; #define SCRIPT_COMMAND_SIZE 512 int OpenRecoveryScript::check_for_script_file(void) { if (!PartitionManager.Mount_By_Path(SCRIPT_FILE_CACHE, false)) { - LOGE("Unable to mount /cache for OpenRecoveryScript support.\n"); + LOGERR("Unable to mount /cache for OpenRecoveryScript support.\n"); return 0; } if (TWFunc::Path_Exists(SCRIPT_FILE_CACHE)) { - LOGI("Script file found: '%s'\n", SCRIPT_FILE_CACHE); + LOGINFO("Script file found: '%s'\n", SCRIPT_FILE_CACHE); // Copy script file to /tmp TWFunc::copy_file(SCRIPT_FILE_CACHE, SCRIPT_FILE_TMP, 0755); // Delete the file from /cache @@ -81,7 +80,7 @@ int OpenRecoveryScript::run_script_file(void) { line_len = strlen(script_line); if (line_len < 2) continue; // there's a blank line or line is too short to contain a command - //ui_print("script line: '%s'\n", script_line); + //gui_print("script line: '%s'\n", script_line); for (i=0; i 0) { - ui_print("%s\n", "Special1 -- No Longer Supported..."); + gui_print("%s\n", "Special1 -- No Longer Supported..."); } else if (value2[i] == '2' && DataManager::GetIntValue(TW_RESTORE_SP2_VAR) > 0) { - ui_print("%s\n", "Special2 -- No Longer Supported..."); + gui_print("%s\n", "Special2 -- No Longer Supported..."); } else if (value2[i] == '3' && DataManager::GetIntValue(TW_RESTORE_SP3_VAR) > 0) { - ui_print("%s\n", "Special3 -- No Longer Supported..."); + gui_print("%s\n", "Special3 -- No Longer Supported..."); } else if ((value2[i] == 'B' || value2[i] == 'b') && Partition_List.find("/boot;") != string::npos) { Restore_List += "/boot;"; - ui_print("Boot\n"); + gui_print("Boot\n"); } else if ((value2[i] == 'A' || value2[i] == 'a') && Partition_List.find("/and-sec;") != string::npos) { Restore_List += "/and-sec;"; - ui_print("Android Secure\n"); + gui_print("Android Secure\n"); } else if ((value2[i] == 'E' || value2[i] == 'e') && Partition_List.find("/sd-ext;") != string::npos) { Restore_List += "/sd-ext;"; - ui_print("SD-Ext\n"); + gui_print("SD-Ext\n"); } else if (value2[i] == 'M' || value2[i] == 'm') { DataManager::SetValue(TW_SKIP_MD5_CHECK_VAR, 1); - ui_print("MD5 check skip is on\n"); + gui_print("MD5 check skip is on\n"); } } @@ -264,7 +263,7 @@ int OpenRecoveryScript::run_script_file(void) { if (!PartitionManager.Run_Restore(folder_path)) ret_val = 1; else - ui_print("Restore complete!\n"); + gui_print("Restore complete!\n"); } else if (strcmp(command, "mount") == 0) { // Mount DataManager::SetValue("tw_action_text2", "Mounting"); @@ -274,7 +273,7 @@ int OpenRecoveryScript::run_script_file(void) { } else strcpy(mount, value); if (PartitionManager.Mount_By_Path(mount, true)) - ui_print("Mounted '%s'\n", mount); + gui_print("Mounted '%s'\n", mount); } else if (strcmp(command, "unmount") == 0 || strcmp(command, "umount") == 0) { // Unmount DataManager::SetValue("tw_action_text2", "Unmounting"); @@ -284,21 +283,21 @@ int OpenRecoveryScript::run_script_file(void) { } else strcpy(mount, value); if (PartitionManager.UnMount_By_Path(mount, true)) - ui_print("Unmounted '%s'\n", mount); + gui_print("Unmounted '%s'\n", mount); } else if (strcmp(command, "set") == 0) { // Set value tok = strtok(value, " "); strcpy(value1, tok); tok = strtok(NULL, " "); strcpy(value2, tok); - ui_print("Setting '%s' to '%s'\n", value1, value2); + gui_print("Setting '%s' to '%s'\n", value1, value2); DataManager::SetValue(value1, value2); } else if (strcmp(command, "mkdir") == 0) { // Make directory (recursive) DataManager::SetValue("tw_action_text2", "Making Directory"); - ui_print("Making directory (recursive): '%s'\n", value); + gui_print("Making directory (recursive): '%s'\n", value); if (TWFunc::Recursive_Mkdir(value)) { - LOGE("Unable to create folder: '%s'\n", value); + LOGERR("Unable to create folder: '%s'\n", value); ret_val = 1; } } else if (strcmp(command, "reboot") == 0) { @@ -309,10 +308,10 @@ int OpenRecoveryScript::run_script_file(void) { string status; TWFunc::Exec_Cmd(value, status); } else { - LOGE("No value given for cmd\n"); + LOGERR("No value given for cmd\n"); } } else if (strcmp(command, "print") == 0) { - ui_print("%s\n", value); + gui_print("%s\n", value); } else if (strcmp(command, "sideload") == 0) { // ADB Sideload DataManager::SetValue("tw_action_text2", "ADB Sideload"); @@ -328,32 +327,36 @@ int OpenRecoveryScript::run_script_file(void) { if (TWFunc::Path_Exists(Sideload_File)) { unlink(Sideload_File.c_str()); } - ui_print("Starting ADB sideload feature...\n"); + gui_print("Starting ADB sideload feature...\n"); DataManager::SetValue("tw_has_cancel", 1); DataManager::SetValue("tw_cancel_action", "adbsideloadcancel"); - ret_val = apply_from_adb(ui, &wipe_cache, Sideload_File.c_str()); + ret_val = apply_from_adb(Sideload_File.c_str()); DataManager::SetValue("tw_has_cancel", 0); if (ret_val != 0) ret_val = 1; // failure - else if (wipe_cache) - PartitionManager.Wipe_By_Path("/cache"); + else if (TWinstall_zip(Sideload_File.c_str(), &wipe_cache) == 0) { + if (wipe_cache) + PartitionManager.Wipe_By_Path("/cache"); + } else { + ret_val = 1; // failure + } sideload = 1; // Causes device to go to the home screen afterwards - ui_print("Sideload finished.\n"); + gui_print("Sideload finished.\n"); } } else { - LOGE("Unrecognized script command: '%s'\n", command); + LOGERR("Unrecognized script command: '%s'\n", command); ret_val = 1; } } fclose(fp); - ui_print("Done processing script file\n"); + gui_print("Done processing script file\n"); } else { - LOGE("Error opening script file '%s'\n", SCRIPT_FILE_TMP); + LOGERR("Error opening script file '%s'\n", SCRIPT_FILE_TMP); return 1; } if (install_cmd && DataManager::GetIntValue(TW_HAS_INJECTTWRP) == 1 && DataManager::GetIntValue(TW_INJECT_AFTER_ZIP) == 1) { string status; - ui_print("Injecting TWRP into boot image...\n"); + gui_print("Injecting TWRP into boot image...\n"); TWPartition* Boot = PartitionManager.Find_Partition_By_Path("/boot"); if (Boot == NULL || Boot->Current_File_System != "emmc") TWFunc::Exec_Cmd("injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash", status); @@ -361,7 +364,7 @@ int OpenRecoveryScript::run_script_file(void) { string injectcmd = "injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash bd=" + Boot->Actual_Block_Device; TWFunc::Exec_Cmd(injectcmd.c_str(), status); } - ui_print("TWRP injection complete.\n"); + gui_print("TWRP injection complete.\n"); } if (sideload) ret_val = 1; // Forces booting to the home page after sideload @@ -373,12 +376,12 @@ int OpenRecoveryScript::Insert_ORS_Command(string Command) { if (ORSfile.is_open()) { //if (Command.substr(Command.size() - 1, 1) != "\n") // Command += "\n"; - LOGI("Inserting '%s'\n", Command.c_str()); + LOGINFO("Inserting '%s'\n", Command.c_str()); ORSfile << Command.c_str(); ORSfile.close(); return 1; } - LOGE("Unable to append '%s' to '%s'\n", Command.c_str(), SCRIPT_FILE_TMP); + LOGERR("Unable to append '%s' to '%s'\n", Command.c_str(), SCRIPT_FILE_TMP); return 0; } @@ -394,22 +397,22 @@ int OpenRecoveryScript::Install_Command(string Zip) { Full_Path = DataManager::GetCurrentStoragePath(); Full_Path += "/" + Zip; - LOGI("Full zip path: '%s'\n", Full_Path.c_str()); + LOGINFO("Full zip path: '%s'\n", Full_Path.c_str()); if (!TWFunc::Path_Exists(Full_Path)) { ret_string = Locate_Zip_File(Full_Path, DataManager::GetCurrentStoragePath()); if (!ret_string.empty()) { Full_Path = ret_string; } else if (DataManager::GetIntValue(TW_HAS_DUAL_STORAGE)) { if (DataManager::GetIntValue(TW_USE_EXTERNAL_STORAGE)) { - LOGI("Zip file not found on external storage, trying internal...\n"); + LOGINFO("Zip file not found on external storage, trying internal...\n"); DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 0); } else { - LOGI("Zip file not found on internal storage, trying external...\n"); + LOGINFO("Zip file not found on internal storage, trying external...\n"); DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 1); } Full_Path = DataManager::GetCurrentStoragePath(); Full_Path += "/" + Zip; - LOGI("Full zip path: '%s'\n", Full_Path.c_str()); + LOGINFO("Full zip path: '%s'\n", Full_Path.c_str()); ret_string = Locate_Zip_File(Full_Path, DataManager::GetCurrentStoragePath()); if (!ret_string.empty()) Full_Path = ret_string; @@ -427,14 +430,14 @@ int OpenRecoveryScript::Install_Command(string Zip) { if (!TWFunc::Path_Exists(Zip)) { // zip file doesn't exist - ui_print("Unable to locate zip file '%s'.\n", Zip.c_str()); + gui_print("Unable to locate zip file '%s'.\n", Zip.c_str()); ret_val = 1; } else { - ui_print("Installing zip file '%s'\n", Zip.c_str()); + gui_print("Installing zip file '%s'\n", Zip.c_str()); ret_val = TWinstall_zip(Zip.c_str(), &wipe_cache); } if (ret_val != 0) { - LOGE("Error installing zip file '%s'\n", Zip.c_str()); + LOGERR("Error installing zip file '%s'\n", Zip.c_str()); ret_val = 1; } else if (wipe_cache) PartitionManager.Wipe_By_Path("/cache"); @@ -474,50 +477,50 @@ int OpenRecoveryScript::Backup_Command(string Options) { DataManager::SetValue(TW_USE_COMPRESSION_VAR, 0); DataManager::SetValue(TW_SKIP_MD5_GENERATE_VAR, 0); - ui_print("Setting backup options:\n"); + gui_print("Setting backup options:\n"); line_len = Options.size(); for (i=0; i 0 && PartitionManager.Mount_By_Path("/data", false) && TWFunc::Path_Exists(MetaEcfsFile)) { if (mount_ecryptfs_drive(EcryptFS_Password.c_str(), Mount_Point.c_str(), Mount_Point.c_str(), 0) != 0) { if (Display_Error) - LOGE("Unable to mount ecryptfs for '%s'\n", Mount_Point.c_str()); + LOGERR("Unable to mount ecryptfs for '%s'\n", Mount_Point.c_str()); else - LOGI("Unable to mount ecryptfs for '%s'\n", Mount_Point.c_str()); + LOGINFO("Unable to mount ecryptfs for '%s'\n", Mount_Point.c_str()); } else { - LOGI("Successfully mounted ecryptfs for '%s'\n", Mount_Point.c_str()); + LOGINFO("Successfully mounted ecryptfs for '%s'\n", Mount_Point.c_str()); Is_Decrypted = true; } } else { @@ -885,11 +885,11 @@ bool TWPartition::UnMount(bool Display_Error) { if (EcryptFS_Password.size() > 0) { if (unmount_ecryptfs_drive(Mount_Point.c_str()) != 0) { if (Display_Error) - LOGE("Unable to unmount ecryptfs for '%s'\n", Mount_Point.c_str()); + LOGERR("Unable to unmount ecryptfs for '%s'\n", Mount_Point.c_str()); else - LOGI("Unable to unmount ecryptfs for '%s'\n", Mount_Point.c_str()); + LOGINFO("Unable to unmount ecryptfs for '%s'\n", Mount_Point.c_str()); } else { - LOGI("Successfully unmounted ecryptfs for '%s'\n", Mount_Point.c_str()); + LOGINFO("Successfully unmounted ecryptfs for '%s'\n", Mount_Point.c_str()); } } #endif @@ -900,9 +900,9 @@ bool TWPartition::UnMount(bool Display_Error) { umount(Mount_Point.c_str()); if (Is_Mounted()) { if (Display_Error) - LOGE("Unable to unmount '%s'\n", Mount_Point.c_str()); + LOGERR("Unable to unmount '%s'\n", Mount_Point.c_str()); else - LOGI("Unable to unmount '%s'\n", Mount_Point.c_str()); + LOGINFO("Unable to unmount '%s'\n", Mount_Point.c_str()); return false; } else return true; @@ -917,12 +917,12 @@ bool TWPartition::Wipe(string New_File_System) { string Layout_Filename = Mount_Point + "/.layout_version"; if (!Can_Be_Wiped) { - LOGE("Partition '%s' cannot be wiped.\n", Mount_Point.c_str()); + LOGERR("Partition '%s' cannot be wiped.\n", Mount_Point.c_str()); return false; } if (Mount_Point == "/cache") - tmplog_offset = 0; + Log_Offset = 0; #ifdef TW_INCLUDE_CRYPTO_SAMSUNG if (Mount_Point == "/data" && Mount(false)) { @@ -955,7 +955,7 @@ bool TWPartition::Wipe(string New_File_System) { else if (New_File_System == "yaffs2") wiped = Wipe_MTD(); else { - LOGE("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), New_File_System.c_str()); + LOGERR("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), New_File_System.c_str()); unlink("/.layout_version"); return false; } @@ -1009,7 +1009,7 @@ bool TWPartition::Wipe_AndSec(void) { if (!Mount(true)) return false; - ui_print("Wiping %s\n", Backup_Display_Name.c_str()); + gui_print("Wiping %s\n", Backup_Display_Name.c_str()); TWFunc::removeDir(Mount_Point + "/.android_secure/", true); return true; } @@ -1021,7 +1021,7 @@ bool TWPartition::Backup(string backup_folder) { return Backup_DD(backup_folder); else if (Backup_Method == FLASH_UTILS) return Backup_Dump_Image(backup_folder); - LOGE("Unknown backup method for '%s'\n", Mount_Point.c_str()); + LOGERR("Unknown backup method for '%s'\n", Mount_Point.c_str()); return false; } @@ -1036,18 +1036,18 @@ bool TWPartition::Check_MD5(string restore_folder) { if (!TWFunc::Path_Exists(Full_Filename)) { // This is a split archive, we presume sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index); - LOGI("split_filename: %s\n", split_filename); + LOGINFO("split_filename: %s\n", split_filename); md5file = split_filename; md5file += ".md5"; if (!TWFunc::Path_Exists(md5file)) { - LOGE("No md5 file found for '%s'.\n", split_filename); - LOGE("Please unselect Enable MD5 verification to restore.\n"); + LOGERR("No md5 file found for '%s'.\n", split_filename); + LOGERR("Please unselect Enable MD5 verification to restore.\n"); return false; } md5sum.setfn(split_filename); while (index < 1000 && TWFunc::Path_Exists(split_filename)) { if (md5sum.verify_md5digest() != 0) { - LOGE("MD5 failed to match on '%s'.\n", split_filename); + LOGERR("MD5 failed to match on '%s'.\n", split_filename); return false; } index++; @@ -1059,13 +1059,13 @@ bool TWPartition::Check_MD5(string restore_folder) { // Single file archive md5file = Full_Filename + ".md5"; if (!TWFunc::Path_Exists(md5file)) { - LOGE("No md5 file found for '%s'.\n", Full_Filename.c_str()); - LOGE("Please unselect Enable MD5 verification to restore.\n"); + LOGERR("No md5 file found for '%s'.\n", Full_Filename.c_str()); + LOGERR("Please unselect Enable MD5 verification to restore.\n"); return false; } md5sum.setfn(Full_Filename); if (md5sum.verify_md5digest() != 0) { - LOGE("MD5 failed to match on '%s'.\n", Full_Filename.c_str()); + LOGERR("MD5 failed to match on '%s'.\n", Full_Filename.c_str()); return false; } else return true; @@ -1078,22 +1078,22 @@ bool TWPartition::Restore(string restore_folder) { string Restore_File_System; TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, "Restoring"); - LOGI("Restore filename is: %s\n", Backup_FileName.c_str()); + LOGINFO("Restore filename is: %s\n", Backup_FileName.c_str()); // Parse backup filename to extract the file system before wiping first_period = Backup_FileName.find("."); if (first_period == string::npos) { - LOGE("Unable to find file system (first period).\n"); + LOGERR("Unable to find file system (first period).\n"); return false; } 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) { - LOGE("Unable to find file system (second period).\n"); + LOGERR("Unable to find file system (second period).\n"); return false; } Restore_File_System.resize(second_period); - LOGI("Restore file system is: '%s'.\n", Restore_File_System.c_str()); + LOGINFO("Restore file system is: '%s'.\n", Restore_File_System.c_str()); if (Is_File_System(Restore_File_System)) return Restore_Tar(restore_folder, Restore_File_System); @@ -1104,7 +1104,7 @@ bool TWPartition::Restore(string restore_folder) { return Restore_Flash_Image(restore_folder); } - LOGE("Unknown restore method for '%s'\n", Mount_Point.c_str()); + LOGERR("Unknown restore method for '%s'\n", Mount_Point.c_str()); return false; } @@ -1123,7 +1123,7 @@ string TWPartition::Backup_Method_By_Name() { } bool TWPartition::Decrypt(string Password) { - LOGI("STUB TWPartition::Decrypt, password: '%s'\n", Password.c_str()); + LOGINFO("STUB TWPartition::Decrypt, password: '%s'\n", Password.c_str()); // Is this needed? return 1; } @@ -1140,11 +1140,11 @@ bool TWPartition::Wipe_Encryption() { if (Has_Data_Media && !Symlink_Mount_Point.empty()) { Recreate_Media_Folder(); } - ui_print("You may need to reboot recovery to be able to use /data again.\n"); + gui_print("You may need to reboot recovery to be able to use /data again.\n"); return true; } else { Has_Data_Media = Save_Data_Media; - LOGE("Unable to format to remove encryption.\n"); + LOGERR("Unable to format to remove encryption.\n"); return false; } return false; @@ -1164,12 +1164,12 @@ void TWPartition::Check_FS_Type() { pr = blkid_new_probe_from_filename(Actual_Block_Device.c_str()); if (blkid_do_fullprobe(pr)) { blkid_free_probe(pr); - LOGI("Can't probe device %s\n", Actual_Block_Device.c_str()); + LOGINFO("Can't probe device %s\n", Actual_Block_Device.c_str()); return; } if (blkid_probe_lookup_value(pr, "TYPE", &type, NULL) < 0) { blkid_free_probe(pr); - LOGI("can't find filesystem on device %s\n", Actual_Block_Device.c_str()); + LOGINFO("can't find filesystem on device %s\n", Actual_Block_Device.c_str()); return; } Current_File_System = type; @@ -1183,17 +1183,17 @@ bool TWPartition::Wipe_EXT23(string File_System) { if (TWFunc::Path_Exists("/sbin/mke2fs")) { string command, result; - ui_print("Formatting %s using mke2fs...\n", Display_Name.c_str()); + gui_print("Formatting %s using mke2fs...\n", Display_Name.c_str()); Find_Actual_Block_Device(); command = "mke2fs -t " + File_System + " -m 0 " + Actual_Block_Device; - LOGI("mke2fs command: %s\n", command.c_str()); + LOGINFO("mke2fs command: %s\n", command.c_str()); if (TWFunc::Exec_Cmd(command, result) == 0) { Current_File_System = File_System; Recreate_AndSec_Folder(); - ui_print("Done.\n"); + gui_print("Done.\n"); return true; } else { - LOGE("Unable to wipe '%s'.\n", Mount_Point.c_str()); + LOGERR("Unable to wipe '%s'.\n", Mount_Point.c_str()); return false; } } else @@ -1209,7 +1209,7 @@ bool TWPartition::Wipe_EXT4() { if (TWFunc::Path_Exists("/sbin/make_ext4fs")) { string Command, result; - ui_print("Formatting %s using make_ext4fs...\n", Display_Name.c_str()); + gui_print("Formatting %s using make_ext4fs...\n", Display_Name.c_str()); Find_Actual_Block_Device(); Command = "make_ext4fs"; if (!Is_Decrypted && Length != 0) { @@ -1220,14 +1220,14 @@ bool TWPartition::Wipe_EXT4() { Command += len; } Command += " " + Actual_Block_Device; - LOGI("make_ext4fs command: %s\n", Command.c_str()); + LOGINFO("make_ext4fs command: %s\n", Command.c_str()); if (TWFunc::Exec_Cmd(Command, result) == 0) { Current_File_System = "ext4"; Recreate_AndSec_Folder(); - ui_print("Done.\n"); + gui_print("Done.\n"); return true; } else { - LOGE("Unable to wipe '%s'.\n", Mount_Point.c_str()); + LOGERR("Unable to wipe '%s'.\n", Mount_Point.c_str()); return false; } } else @@ -1243,16 +1243,16 @@ bool TWPartition::Wipe_FAT() { if (!UnMount(true)) return false; - ui_print("Formatting %s using mkdosfs...\n", Display_Name.c_str()); + gui_print("Formatting %s using mkdosfs...\n", Display_Name.c_str()); Find_Actual_Block_Device(); command = "mkdosfs " + Actual_Block_Device; if (TWFunc::Exec_Cmd(command, result) == 0) { Current_File_System = "vfat"; Recreate_AndSec_Folder(); - ui_print("Done.\n"); + gui_print("Done.\n"); return true; } else { - LOGE("Unable to wipe '%s'.\n", Mount_Point.c_str()); + LOGERR("Unable to wipe '%s'.\n", Mount_Point.c_str()); return false; } return true; @@ -1270,15 +1270,15 @@ bool TWPartition::Wipe_EXFAT() { if (!UnMount(true)) return false; - ui_print("Formatting %s using mkexfatfs...\n", Display_Name.c_str()); + gui_print("Formatting %s using mkexfatfs...\n", Display_Name.c_str()); Find_Actual_Block_Device(); command = "mkexfatfs " + Actual_Block_Device; if (TWFunc::Exec_Cmd(command, result) == 0) { Recreate_AndSec_Folder(); - ui_print("Done.\n"); + gui_print("Done.\n"); return true; } else { - LOGE("Unable to wipe '%s'.\n", Mount_Point.c_str()); + LOGERR("Unable to wipe '%s'.\n", Mount_Point.c_str()); return false; } return true; @@ -1290,32 +1290,32 @@ bool TWPartition::Wipe_MTD() { if (!UnMount(true)) return false; - ui_print("MTD Formatting \"%s\"\n", MTD_Name.c_str()); + gui_print("MTD Formatting \"%s\"\n", MTD_Name.c_str()); mtd_scan_partitions(); const MtdPartition* mtd = mtd_find_partition_by_name(MTD_Name.c_str()); if (mtd == NULL) { - LOGE("No mtd partition named '%s'", MTD_Name.c_str()); + LOGERR("No mtd partition named '%s'", MTD_Name.c_str()); return false; } MtdWriteContext* ctx = mtd_write_partition(mtd); if (ctx == NULL) { - LOGE("Can't write '%s', failed to format.", MTD_Name.c_str()); + LOGERR("Can't write '%s', failed to format.", MTD_Name.c_str()); return false; } if (mtd_erase_blocks(ctx, -1) == -1) { mtd_write_close(ctx); - LOGE("Failed to format '%s'", MTD_Name.c_str()); + LOGERR("Failed to format '%s'", MTD_Name.c_str()); return false; } if (mtd_write_close(ctx) != 0) { - LOGE("Failed to close '%s'", MTD_Name.c_str()); + LOGERR("Failed to close '%s'", MTD_Name.c_str()); return false; } Current_File_System = "yaffs2"; Recreate_AndSec_Folder(); - ui_print("Done.\n"); + gui_print("Done.\n"); return true; } @@ -1323,7 +1323,7 @@ bool TWPartition::Wipe_RMRF() { if (!Mount(true)) return false; - ui_print("Removing all files under '%s'\n", Mount_Point.c_str()); + gui_print("Removing all files under '%s'\n", Mount_Point.c_str()); TWFunc::removeDir(Mount_Point, true); Recreate_AndSec_Folder(); return true; @@ -1336,7 +1336,7 @@ bool TWPartition::Wipe_Data_Without_Wiping_Media() { if (!Mount(true)) return false; - ui_print("Wiping data without wiping /data/media ...\n"); + gui_print("Wiping data without wiping /data/media ...\n"); DIR* d; d = opendir("/data"); @@ -1355,14 +1355,14 @@ bool TWPartition::Wipe_Data_Without_Wiping_Media() { TWFunc::removeDir(dir, false); } else if (de->d_type == DT_REG || de->d_type == DT_LNK || de->d_type == DT_FIFO || de->d_type == DT_SOCK) { if (!unlink(dir.c_str())) - LOGI("Unable to unlink '%s'\n", dir.c_str()); + LOGINFO("Unable to unlink '%s'\n", dir.c_str()); } } closedir(d); - ui_print("Done.\n"); + gui_print("Done.\n"); return true; } - ui_print("Dirent failed to open /data, error!\n"); + gui_print("Dirent failed to open /data, error!\n"); return false; } @@ -1379,7 +1379,7 @@ bool TWPartition::Backup_Tar(string backup_folder) { return false; TWFunc::GUI_Operation_Text(TW_BACKUP_TEXT, Backup_Display_Name, "Backing Up"); - ui_print("Backing up %s...\n", Backup_Display_Name.c_str()); + gui_print("Backing up %s...\n", Backup_Display_Name.c_str()); DataManager::GetValue(TW_USE_COMPRESSION_VAR, use_compression); @@ -1388,13 +1388,13 @@ bool TWPartition::Backup_Tar(string backup_folder) { Full_FileName = backup_folder + "/" + Backup_FileName; if (Backup_Size > MAX_ARCHIVE_SIZE) { // This backup needs to be split into multiple archives - ui_print("Breaking backup file into multiple archives...\n"); + gui_print("Breaking backup file into multiple archives...\n"); sprintf(back_name, "%s", Backup_Path.c_str()); tar.setdir(back_name); tar.setfn(Full_FileName); backup_count = tar.splitArchiveFork(); if (backup_count == -1) { - LOGE("Error tarring split files!\n"); + LOGERR("Error tarring split files!\n"); return false; } return true; @@ -1415,7 +1415,7 @@ bool TWPartition::Backup_Tar(string backup_folder) { return -1; } if (TWFunc::Get_File_Size(Full_FileName) == 0) { - LOGE("Backup file size for '%s' is 0 bytes.\n", Full_FileName.c_str()); + LOGERR("Backup file size for '%s' is 0 bytes.\n", Full_FileName.c_str()); return false; } } @@ -1431,7 +1431,7 @@ bool TWPartition::Backup_DD(string backup_folder) { DD_BS = backup_size; TWFunc::GUI_Operation_Text(TW_BACKUP_TEXT, Display_Name, "Backing Up"); - ui_print("Backing up %s...\n", Display_Name.c_str()); + gui_print("Backing up %s...\n", Display_Name.c_str()); sprintf(back_name, "%s.%s.win", Backup_Name.c_str(), Current_File_System.c_str()); Backup_FileName = back_name; @@ -1439,10 +1439,10 @@ bool TWPartition::Backup_DD(string backup_folder) { Full_FileName = backup_folder + "/" + Backup_FileName; Command = "dd if=" + Actual_Block_Device + " of='" + Full_FileName + "'" + " bs=" + DD_BS + "c count=1"; - LOGI("Backup command: '%s'\n", Command.c_str()); + LOGINFO("Backup command: '%s'\n", Command.c_str()); TWFunc::Exec_Cmd(Command, result); if (TWFunc::Get_File_Size(Full_FileName) == 0) { - LOGE("Backup file size for '%s' is 0 bytes.\n", Full_FileName.c_str()); + LOGERR("Backup file size for '%s' is 0 bytes.\n", Full_FileName.c_str()); return false; } return true; @@ -1454,7 +1454,7 @@ bool TWPartition::Backup_Dump_Image(string backup_folder) { int use_compression; TWFunc::GUI_Operation_Text(TW_BACKUP_TEXT, Display_Name, "Backing Up"); - ui_print("Backing up %s...\n", Display_Name.c_str()); + gui_print("Backing up %s...\n", Display_Name.c_str()); sprintf(back_name, "%s.%s.win", Backup_Name.c_str(), Current_File_System.c_str()); Backup_FileName = back_name; @@ -1462,11 +1462,11 @@ bool TWPartition::Backup_Dump_Image(string backup_folder) { Full_FileName = backup_folder + "/" + Backup_FileName; Command = "dump_image " + MTD_Name + " '" + Full_FileName + "'"; - LOGI("Backup command: '%s'\n", Command.c_str()); + LOGINFO("Backup command: '%s'\n", Command.c_str()); TWFunc::Exec_Cmd(Command, result); if (TWFunc::Get_File_Size(Full_FileName) == 0) { // Actual size may not match backup size due to bad blocks on MTD devices so just check for 0 bytes - LOGE("Backup file size for '%s' is 0 bytes.\n", Full_FileName.c_str()); + LOGERR("Backup file size for '%s' is 0 bytes.\n", Full_FileName.c_str()); return false; } return true; @@ -1481,12 +1481,12 @@ bool TWPartition::Restore_Tar(string restore_folder, string Restore_File_System) if (!Wipe_AndSec()) return false; } else { - ui_print("Wiping %s...\n", Display_Name.c_str()); + gui_print("Wiping %s...\n", Display_Name.c_str()); if (!Wipe(Restore_File_System)) return false; } TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Backup_Display_Name, "Restoring"); - ui_print("Restoring %s...\n", Backup_Display_Name.c_str()); + gui_print("Restoring %s...\n", Backup_Display_Name.c_str()); if (!Mount(true)) return false; @@ -1495,13 +1495,13 @@ bool TWPartition::Restore_Tar(string restore_folder, string Restore_File_System) if (!TWFunc::Path_Exists(Full_FileName)) { if (!TWFunc::Path_Exists(Full_FileName)) { // Backup is multiple archives - LOGI("Backup is multiple archives.\n"); + LOGINFO("Backup is multiple archives.\n"); sprintf(split_index, "%03i", index); Full_FileName = restore_folder + "/" + Backup_FileName + split_index; while (TWFunc::Path_Exists(Full_FileName)) { index++; - ui_print("Restoring archive %i...\n", index); - LOGI("Restoring '%s'...\n", Full_FileName.c_str()); + gui_print("Restoring archive %i...\n", index); + LOGINFO("Restoring '%s'...\n", Full_FileName.c_str()); twrpTar tar; tar.setdir("/"); tar.setfn(Full_FileName); @@ -1511,7 +1511,7 @@ bool TWPartition::Restore_Tar(string restore_folder, string Restore_File_System) Full_FileName = restore_folder + "/" + Backup_FileName + split_index; } if (index == 0) { - LOGE("Error locating restore file: '%s'\n", Full_FileName.c_str()); + LOGERR("Error locating restore file: '%s'\n", Full_FileName.c_str()); return false; } } @@ -1532,20 +1532,20 @@ bool TWPartition::Restore_DD(string restore_folder) { Full_FileName = restore_folder + "/" + Backup_FileName; if (!Find_Partition_Size()) { - LOGE("Unable to find partition size for '%s'\n", Mount_Point.c_str()); + LOGERR("Unable to find partition size for '%s'\n", Mount_Point.c_str()); return false; } unsigned long long backup_size = TWFunc::Get_File_Size(Full_FileName); if (backup_size > Size) { - LOGE("Size (%iMB) of backup '%s' is larger than target device '%s' (%iMB)\n", + LOGERR("Size (%iMB) of backup '%s' is larger than target device '%s' (%iMB)\n", (int)(backup_size / 1048576LLU), Full_FileName.c_str(), Actual_Block_Device.c_str(), (int)(Size / 1048576LLU)); return false; } - ui_print("Restoring %s...\n", Display_Name.c_str()); + gui_print("Restoring %s...\n", Display_Name.c_str()); Command = "dd bs=4096 if='" + Full_FileName + "' of=" + Actual_Block_Device; - LOGI("Restore command: '%s'\n", Command.c_str()); + LOGINFO("Restore command: '%s'\n", Command.c_str()); TWFunc::Exec_Cmd(Command, result); return true; } @@ -1553,14 +1553,14 @@ bool TWPartition::Restore_DD(string restore_folder) { bool TWPartition::Restore_Flash_Image(string restore_folder) { string Full_FileName, Command, result; - ui_print("Restoring %s...\n", Display_Name.c_str()); + gui_print("Restoring %s...\n", Display_Name.c_str()); Full_FileName = restore_folder + "/" + Backup_FileName; // Sometimes flash image doesn't like to flash due to the first 2KB matching, so we erase first to ensure that it flashes Command = "erase_image " + MTD_Name; - LOGI("Erase command: '%s'\n", Command.c_str()); + LOGINFO("Erase command: '%s'\n", Command.c_str()); TWFunc::Exec_Cmd(Command, result); Command = "flash_image " + MTD_Name + " '" + Full_FileName + "'"; - LOGI("Restore command: '%s'\n", Command.c_str()); + LOGINFO("Restore command: '%s'\n", Command.c_str()); TWFunc::Exec_Cmd(Command, result); return true; } @@ -1599,7 +1599,7 @@ bool TWPartition::Update_Size(bool Display_Error) { int us = (int)(Used / 1048576LLU); int fre = (int)(Free / 1048576LLU); int datmed = (int)(data_media_used / 1048576LLU); - LOGI("Data backup size is %iMB, size: %iMB, used: %iMB, free: %iMB, in data/media: %iMB.\n", bak, total, us, fre, datmed); + LOGINFO("Data backup size is %iMB, size: %iMB, used: %iMB, free: %iMB, in data/media: %iMB.\n", bak, total, us, fre, datmed); } else { if (!Was_Already_Mounted) UnMount(false); @@ -1642,10 +1642,10 @@ void TWPartition::Recreate_Media_Folder(void) { string Command; if (!Mount(true)) { - LOGE("Unable to recreate /data/media folder.\n"); + LOGERR("Unable to recreate /data/media folder.\n"); } else if (!TWFunc::Path_Exists("/data/media")) { PartitionManager.Mount_By_Path(Symlink_Mount_Point, true); - LOGI("Recreating /data/media folder.\n"); + LOGINFO("Recreating /data/media folder.\n"); mkdir("/data/media", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); PartitionManager.UnMount_By_Path(Symlink_Mount_Point, true); } @@ -1654,11 +1654,11 @@ void TWPartition::Recreate_Media_Folder(void) { void TWPartition::Recreate_AndSec_Folder(void) { if (!Has_Android_Secure) return; - LOGI("Creating %s: %s\n", Backup_Display_Name.c_str(), Symlink_Path.c_str()); + LOGINFO("Creating %s: %s\n", Backup_Display_Name.c_str(), Symlink_Path.c_str()); if (!Mount(true)) { - LOGE("Unable to recreate %s folder.\n", Backup_Name.c_str()); + LOGERR("Unable to recreate %s folder.\n", Backup_Name.c_str()); } else if (!TWFunc::Path_Exists(Symlink_Path)) { - LOGI("Recreating %s folder.\n", Backup_Name.c_str()); + LOGINFO("Recreating %s folder.\n", Backup_Name.c_str()); PartitionManager.Mount_By_Path(Symlink_Mount_Point, true); mkdir(Symlink_Path.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); PartitionManager.UnMount_By_Path(Symlink_Mount_Point, true); diff --git a/partitionmanager.cpp b/partitionmanager.cpp index f40b35eeb..69812c86e 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -34,8 +34,7 @@ #include #include #include "variables.h" -#include "common.h" -#include "ui.h" +#include "twcommon.h" #include "partitions.hpp" #include "data.hpp" #include "twrp-functions.hpp" @@ -51,8 +50,6 @@ #include "cutils/properties.h" #endif -extern RecoveryUI* ui; - int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) { FILE *fstabFile; char fstab_line[MAX_FSTAB_LINE_LENGTH]; @@ -60,7 +57,7 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) fstabFile = fopen(Fstab_Filename.c_str(), "rt"); if (fstabFile == NULL) { - LOGE("Critical Error: Unable to open fstab at '%s'.\n", Fstab_Filename.c_str()); + LOGERR("Critical Error: Unable to open fstab at '%s'.\n", Fstab_Filename.c_str()); return false; } @@ -81,7 +78,7 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) Partitions.push_back(partition); DataManager::SetValue("tw_settings_path", partition->Storage_Path); DataManager::SetValue("tw_storage_path", partition->Storage_Path); - LOGI("Settings storage is '%s'\n", partition->Storage_Path.c_str()); + LOGINFO("Settings storage is '%s'\n", partition->Storage_Path.c_str()); } else { partition->Is_Settings_Storage = false; Partitions.push_back(partition); @@ -99,18 +96,18 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) Found_Settings_Storage = true; DataManager::SetValue("tw_settings_path", (*iter)->Storage_Path); DataManager::SetValue("tw_storage_path", (*iter)->Storage_Path); - LOGI("Settings storage is '%s'\n", (*iter)->Storage_Path.c_str()); + LOGINFO("Settings storage is '%s'\n", (*iter)->Storage_Path.c_str()); break; } } if (!Found_Settings_Storage) - LOGE("Unable to locate storage partition for storing settings file.\n"); + LOGERR("Unable to locate storage partition for storing settings file.\n"); } if (!Write_Fstab()) { if (Display_Error) - LOGE("Error creating fstab\n"); + LOGERR("Error creating fstab\n"); else - LOGI("Error creating fstab\n"); + LOGINFO("Error creating fstab\n"); } Update_System_Details(); UnMount_Main_Partitions(); @@ -124,7 +121,7 @@ int TWPartitionManager::Write_Fstab(void) { fp = fopen("/etc/fstab", "w"); if (fp == NULL) { - LOGI("Can not open /etc/fstab.\n"); + LOGINFO("Can not open /etc/fstab.\n"); return false; } for (iter = Partitions.begin(); iter != Partitions.end(); iter++) { @@ -137,7 +134,7 @@ int TWPartitionManager::Write_Fstab(void) { if (ParentPartition) ParentPartition->Has_SubPartition = true; else - LOGE("Unable to locate parent partition '%s' of '%s'\n", (*iter)->SubPartition_Of.c_str(), (*iter)->Mount_Point.c_str()); + LOGERR("Unable to locate parent partition '%s' of '%s'\n", (*iter)->SubPartition_Of.c_str(), (*iter)->Mount_Point.c_str()); } } } @@ -259,9 +256,9 @@ int TWPartitionManager::Mount_By_Path(string Path, bool Display_Error) { if (found) { return ret; } else if (Display_Error) { - LOGE("Mount: Unable to find partition for path '%s'\n", Local_Path.c_str()); + LOGERR("Mount: Unable to find partition for path '%s'\n", Local_Path.c_str()); } else { - LOGI("Mount: Unable to find partition for path '%s'\n", Local_Path.c_str()); + LOGINFO("Mount: Unable to find partition for path '%s'\n", Local_Path.c_str()); } return false; } @@ -282,9 +279,9 @@ int TWPartitionManager::Mount_By_Block(string Block, bool Display_Error) { return Part->Mount(Display_Error); } if (Display_Error) - LOGE("Mount: Unable to find partition for block '%s'\n", Block.c_str()); + LOGERR("Mount: Unable to find partition for block '%s'\n", Block.c_str()); else - LOGI("Mount: Unable to find partition for block '%s'\n", Block.c_str()); + LOGINFO("Mount: Unable to find partition for block '%s'\n", Block.c_str()); return false; } @@ -304,9 +301,9 @@ int TWPartitionManager::Mount_By_Name(string Name, bool Display_Error) { return Part->Mount(Display_Error); } if (Display_Error) - LOGE("Mount: Unable to find partition for name '%s'\n", Name.c_str()); + LOGERR("Mount: Unable to find partition for name '%s'\n", Name.c_str()); else - LOGI("Mount: Unable to find partition for name '%s'\n", Name.c_str()); + LOGINFO("Mount: Unable to find partition for name '%s'\n", Name.c_str()); return false; } @@ -328,9 +325,9 @@ int TWPartitionManager::UnMount_By_Path(string Path, bool Display_Error) { if (found) { return ret; } else if (Display_Error) { - LOGE("UnMount: Unable to find partition for path '%s'\n", Local_Path.c_str()); + LOGERR("UnMount: Unable to find partition for path '%s'\n", Local_Path.c_str()); } else { - LOGI("UnMount: Unable to find partition for path '%s'\n", Local_Path.c_str()); + LOGINFO("UnMount: Unable to find partition for path '%s'\n", Local_Path.c_str()); } return false; } @@ -351,9 +348,9 @@ int TWPartitionManager::UnMount_By_Block(string Block, bool Display_Error) { return Part->UnMount(Display_Error); } if (Display_Error) - LOGE("UnMount: Unable to find partition for block '%s'\n", Block.c_str()); + LOGERR("UnMount: Unable to find partition for block '%s'\n", Block.c_str()); else - LOGI("UnMount: Unable to find partition for block '%s'\n", Block.c_str()); + LOGINFO("UnMount: Unable to find partition for block '%s'\n", Block.c_str()); return false; } @@ -373,9 +370,9 @@ int TWPartitionManager::UnMount_By_Name(string Name, bool Display_Error) { return Part->UnMount(Display_Error); } if (Display_Error) - LOGE("UnMount: Unable to find partition for name '%s'\n", Name.c_str()); + LOGERR("UnMount: Unable to find partition for name '%s'\n", Name.c_str()); else - LOGI("UnMount: Unable to find partition for name '%s'\n", Name.c_str()); + LOGINFO("UnMount: Unable to find partition for name '%s'\n", Name.c_str()); return false; } @@ -385,7 +382,7 @@ int TWPartitionManager::Is_Mounted_By_Path(string Path) { if (Part) return Part->Is_Mounted(); else - LOGI("Is_Mounted: Unable to find partition for path '%s'\n", Path.c_str()); + LOGINFO("Is_Mounted: Unable to find partition for path '%s'\n", Path.c_str()); return false; } @@ -395,7 +392,7 @@ int TWPartitionManager::Is_Mounted_By_Block(string Block) { if (Part) return Part->Is_Mounted(); else - LOGI("Is_Mounted: Unable to find partition for block '%s'\n", Block.c_str()); + LOGINFO("Is_Mounted: Unable to find partition for block '%s'\n", Block.c_str()); return false; } @@ -405,7 +402,7 @@ int TWPartitionManager::Is_Mounted_By_Name(string Name) { if (Part) return Part->Is_Mounted(); else - LOGI("Is_Mounted: Unable to find partition for name '%s'\n", Name.c_str()); + LOGINFO("Is_Mounted: Unable to find partition for name '%s'\n", Name.c_str()); return false; } @@ -470,7 +467,7 @@ int TWPartitionManager::Check_Backup_Name(bool Display_Error) { // Check size if (copy_size > MAX_BACKUP_NAME_LEN) { if (Display_Error) - LOGE("Backup name is too long.\n"); + LOGERR("Backup name is too long.\n"); return -2; } @@ -489,7 +486,7 @@ int TWPartitionManager::Check_Backup_Name(bool Display_Error) { // and -_.{}[] } else { if (Display_Error) - LOGE("Backup name '%s' contains invalid character: '%c'\n", backup_name, (char)cur_char); + LOGERR("Backup name '%s' contains invalid character: '%c'\n", backup_name, (char)cur_char); return -3; } } @@ -500,7 +497,7 @@ int TWPartitionManager::Check_Backup_Name(bool Display_Error) { sprintf(tw_image_dir,"%s/%s", backup_loc, Backup_Name.c_str()); if (TWFunc::Path_Exists(tw_image_dir)) { if (Display_Error) - LOGE("A backup with this name already exists.\n"); + LOGERR("A backup with this name already exists.\n"); return -4; } // No problems found, return 0 @@ -518,17 +515,17 @@ bool TWPartitionManager::Make_MD5(bool generate_md5, string Backup_Folder, strin return true; TWFunc::GUI_Operation_Text(TW_GENERATE_MD5_TEXT, "Generating MD5"); - ui_print(" * Generating md5...\n"); + gui_print(" * Generating md5...\n"); if (TWFunc::Path_Exists(Full_File)) { md5sum.setfn(Backup_Folder + Backup_Filename); if (md5sum.computeMD5() == 0) if (md5sum.write_md5digest() == 0) - ui_print(" * MD5 Created.\n"); + gui_print(" * MD5 Created.\n"); else return -1; else - ui_print(" * MD5 Error!\n"); + gui_print(" * MD5 Error!\n"); } else { char filename[512]; int index = 0; @@ -540,7 +537,7 @@ bool TWPartitionManager::Make_MD5(bool generate_md5, string Backup_Folder, strin if (md5sum.computeMD5() == 0) { if (md5sum.write_md5digest() != 0) { - ui_print(" * MD5 Error.\n"); + gui_print(" * MD5 Error.\n"); return false; } } @@ -552,10 +549,10 @@ bool TWPartitionManager::Make_MD5(bool generate_md5, string Backup_Folder, strin strfn = filename; } if (index == 0) { - LOGE("Backup file: '%s' not found!\n", filename); + LOGERR("Backup file: '%s' not found!\n", filename); return false; } - ui_print(" * MD5 Created.\n"); + gui_print(" * MD5 Created.\n"); } return true; } @@ -584,9 +581,9 @@ bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folde remain_time = (*img_bytes_remaining / (unsigned long)img_bps) + (*file_bytes_remaining / (unsigned long)file_bps); pos = (total_time - remain_time) / (float) total_time; - ui->SetProgress(pos); + DataManager::SetProgress(pos); - LOGI("Estimated Total time: %lu Estimated remaining time: %lu\n", total_time, remain_time); + LOGINFO("Estimated Total time: %lu Estimated remaining time: %lu\n", total_time, remain_time); // And get the time if (Part->Backup_Method == 1) @@ -596,7 +593,7 @@ bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folde // Set the position pos = section_time / (float) total_time; - ui->ShowProgress(pos, section_time); + DataManager::ShowProgress(pos, section_time); time(&start); @@ -620,7 +617,7 @@ bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folde } time(&stop); backup_time = (int) difftime(stop, start); - LOGI("Partition Backup time: %d\n", backup_time); + LOGINFO("Partition Backup time: %d\n", backup_time); if (Part->Backup_Method == 1) { *file_bytes_remaining -= Part->Backup_Size; *file_time += backup_time; @@ -668,11 +665,11 @@ int TWPartitionManager::Run_Backup(void) { sprintf(timestamp,"%04d-%02d-%02d--%02d-%02d-%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); Backup_Name = timestamp; } - LOGI("Backup Name is: '%s'\n", Backup_Name.c_str()); + LOGINFO("Backup Name is: '%s'\n", Backup_Name.c_str()); Full_Backup_Path = Backup_Folder + "/" + Backup_Name + "/"; - LOGI("Full_Backup_Path is: '%s'\n", Full_Backup_Path.c_str()); + LOGINFO("Full_Backup_Path is: '%s'\n", Full_Backup_Path.c_str()); - LOGI("Calculating backup details...\n"); + LOGINFO("Calculating backup details...\n"); DataManager::GetValue("tw_backup_list", Backup_List); if (!Backup_List.empty()) { end_pos = Backup_List.find(";", start_pos); @@ -699,7 +696,7 @@ int TWPartitionManager::Run_Backup(void) { } } } else { - LOGE("Unable to locate '%s' partition for backup calculations.\n", backup_path.c_str()); + LOGERR("Unable to locate '%s' partition for backup calculations.\n", backup_path.c_str()); } start_pos = end_pos + 1; end_pos = Backup_List.find(";", start_pos); @@ -707,36 +704,36 @@ int TWPartitionManager::Run_Backup(void) { } if (partition_count == 0) { - ui_print("No partitions selected for backup.\n"); + gui_print("No partitions selected for backup.\n"); return false; } total_bytes = file_bytes + img_bytes; - ui_print(" * Total number of partitions to back up: %d\n", partition_count); - ui_print(" * Total size of all data: %lluMB\n", total_bytes / 1024 / 1024); + gui_print(" * Total number of partitions to back up: %d\n", partition_count); + gui_print(" * Total size of all data: %lluMB\n", total_bytes / 1024 / 1024); storage = Find_Partition_By_Path(DataManager::GetCurrentStoragePath()); if (storage != NULL) { free_space = storage->Free; - ui_print(" * Available space: %lluMB\n", free_space / 1024 / 1024); + gui_print(" * Available space: %lluMB\n", free_space / 1024 / 1024); } else { - LOGE("Unable to locate storage device.\n"); + LOGERR("Unable to locate storage device.\n"); return false; } if (free_space - (32 * 1024 * 1024) < total_bytes) { // We require an extra 32MB just in case - LOGE("Not enough free space on storage.\n"); + LOGERR("Not enough free space on storage.\n"); return false; } img_bytes_remaining = img_bytes; file_bytes_remaining = file_bytes; - ui_print("\n[BACKUP STARTED]\n"); - ui_print(" * Backup Folder: %s\n", Full_Backup_Path.c_str()); + gui_print("\n[BACKUP STARTED]\n"); + gui_print(" * Backup Folder: %s\n", Full_Backup_Path.c_str()); if (!TWFunc::Recursive_Mkdir(Full_Backup_Path)) { - LOGE("Failed to make backup folder.\n"); + LOGERR("Failed to make backup folder.\n"); return false; } - ui->SetProgress(0.0); + DataManager::SetProgress(0.0); start_pos = 0; end_pos = Backup_List.find(";", start_pos); @@ -747,7 +744,7 @@ int TWPartitionManager::Run_Backup(void) { if (!Backup_Partition(backup_part, Full_Backup_Path, do_md5, &img_bytes_remaining, &file_bytes_remaining, &img_time, &file_time, &img_bytes, &file_bytes)) return false; } else { - LOGE("Unable to locate '%s' partition for backup process.\n", backup_path.c_str()); + LOGERR("Unable to locate '%s' partition for backup process.\n", backup_path.c_str()); } start_pos = end_pos + 1; end_pos = Backup_List.find(";", start_pos); @@ -761,8 +758,8 @@ int TWPartitionManager::Run_Backup(void) { int img_bps = (int)img_bytes / (int)img_time; unsigned long long file_bps = file_bytes / (int)file_time; - ui_print("Average backup rate for file systems: %llu MB/sec\n", (file_bps / (1024 * 1024))); - ui_print("Average backup rate for imaged drives: %lu MB/sec\n", (img_bps / (1024 * 1024))); + gui_print("Average backup rate for file systems: %llu MB/sec\n", (file_bps / (1024 * 1024))); + gui_print("Average backup rate for imaged drives: %lu MB/sec\n", (img_bps / (1024 * 1024))); time(&total_stop); int total_time = (int) difftime(total_stop, total_start); @@ -789,10 +786,10 @@ int TWPartitionManager::Run_Backup(void) { else DataManager::SetValue(TW_BACKUP_AVG_FILE_RATE, file_bps); - ui_print("[%llu MB TOTAL BACKED UP]\n", actual_backup_size); + gui_print("[%llu MB TOTAL BACKED UP]\n", actual_backup_size); Update_System_Details(); UnMount_Main_Partitions(); - ui_print("[BACKUP COMPLETED IN %d SECONDS]\n\n", total_time); // the end + gui_print("[BACKUP COMPLETED IN %d SECONDS]\n\n", total_time); // the end string backup_log = Full_Backup_Path + "recovery.log"; TWFunc::copy_file("/tmp/recovery.log", backup_log, 0644); return true; @@ -801,7 +798,7 @@ int TWPartitionManager::Run_Backup(void) { bool TWPartitionManager::Restore_Partition(TWPartition* Part, string Restore_Name, int partition_count) { time_t Start, Stop; time(&Start); - ui->ShowProgress(1.0 / (float)partition_count, 150); + DataManager::ShowProgress(1.0 / (float)partition_count, 150); if (!Part->Restore(Restore_Name)) return false; if (Part->Has_SubPartition) { @@ -815,7 +812,7 @@ bool TWPartitionManager::Restore_Partition(TWPartition* Part, string Restore_Nam } } time(&Stop); - ui_print("[%s done (%d seconds)]\n\n", Part->Backup_Display_Name.c_str(), (int)difftime(Stop, Start)); + gui_print("[%s done (%d seconds)]\n\n", Part->Backup_Display_Name.c_str(), (int)difftime(Stop, Start)); return true; } @@ -827,8 +824,8 @@ int TWPartitionManager::Run_Restore(string Restore_Name) { string Restore_List, restore_path; size_t start_pos = 0, end_pos; - ui_print("\n[RESTORE STARTED]\n\n"); - ui_print("Restore folder: '%s'\n", Restore_Name.c_str()); + gui_print("\n[RESTORE STARTED]\n\n"); + gui_print("Restore folder: '%s'\n", Restore_Name.c_str()); if (!Mount_Current_Storage(true)) return false; @@ -837,9 +834,9 @@ int TWPartitionManager::Run_Restore(string Restore_Name) { 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, "Verifying MD5"); - ui_print("Verifying MD5...\n"); + gui_print("Verifying MD5...\n"); } else { - ui_print("Skipping MD5 check based on user setting.\n"); + gui_print("Skipping MD5 check based on user setting.\n"); } DataManager::GetValue("tw_restore_selected", Restore_List); if (!Restore_List.empty()) { @@ -862,7 +859,7 @@ int TWPartitionManager::Run_Restore(string Restore_Name) { } } } else { - LOGE("Unable to locate '%s' partition for restoring.\n", restore_path.c_str()); + LOGERR("Unable to locate '%s' partition for restoring.\n", restore_path.c_str()); } start_pos = end_pos + 1; end_pos = Restore_List.find(";", start_pos); @@ -870,12 +867,12 @@ int TWPartitionManager::Run_Restore(string Restore_Name) { } if (partition_count == 0) { - LOGE("No partitions selected for restore.\n"); + LOGERR("No partitions selected for restore.\n"); return false; } - ui_print("Restoring %i partitions...\n", partition_count); - ui->SetProgress(0.0); + gui_print("Restoring %i partitions...\n", partition_count); + DataManager::SetProgress(0.0); start_pos = 0; if (!Restore_List.empty()) { end_pos = Restore_List.find(";", start_pos); @@ -887,7 +884,7 @@ int TWPartitionManager::Run_Restore(string Restore_Name) { if (!Restore_Partition(restore_part, Restore_Name, partition_count)) return false; } else { - LOGE("Unable to locate '%s' partition for restoring.\n", restore_path.c_str()); + LOGERR("Unable to locate '%s' partition for restoring.\n", restore_path.c_str()); } start_pos = end_pos + 1; end_pos = Restore_List.find(";", start_pos); @@ -898,7 +895,7 @@ int TWPartitionManager::Run_Restore(string Restore_Name) { Update_System_Details(); UnMount_Main_Partitions(); time(&rStop); - ui_print("[RESTORE COMPLETED IN %d SECONDS]\n\n",(int)difftime(rStop,rStart)); + gui_print("[RESTORE COMPLETED IN %d SECONDS]\n\n",(int)difftime(rStop,rStart)); return true; } @@ -911,7 +908,7 @@ void TWPartitionManager::Set_Restore_Files(string Restore_Name) { d = opendir(Restore_Name.c_str()); if (d == NULL) { - LOGE("Error opening %s\n", Restore_Name.c_str()); + LOGERR("Error opening %s\n", Restore_Name.c_str()); return; } @@ -968,7 +965,7 @@ void TWPartitionManager::Set_Restore_Files(string Restore_Name) { TWPartition* Part = Find_Partition_By_Path(label); if (Part == NULL) { - LOGE(" Unable to locate partition by backup name: '%s'\n", label); + LOGERR(" Unable to locate partition by backup name: '%s'\n", label); continue; } @@ -1008,7 +1005,7 @@ int TWPartitionManager::Wipe_By_Path(string Path) { if (found) { return ret; } else - LOGE("Wipe: Unable to find partition for path '%s'\n", Local_Path.c_str()); + LOGERR("Wipe: Unable to find partition for path '%s'\n", Local_Path.c_str()); return false; } @@ -1027,7 +1024,7 @@ int TWPartitionManager::Wipe_By_Block(string Block) { } else return Part->Wipe(); } - LOGE("Wipe: Unable to find partition for block '%s'\n", Block.c_str()); + LOGERR("Wipe: Unable to find partition for block '%s'\n", Block.c_str()); return false; } @@ -1046,7 +1043,7 @@ int TWPartitionManager::Wipe_By_Name(string Name) { } else return Part->Wipe(); } - LOGE("Wipe: Unable to find partition for name '%s'\n", Name.c_str()); + LOGERR("Wipe: Unable to find partition for name '%s'\n", Name.c_str()); return false; } @@ -1079,11 +1076,11 @@ int TWPartitionManager::Wipe_Dalvik_Cache(void) { dir.push_back("/data/dalvik-cache"); dir.push_back("/cache/dalvik-cache"); dir.push_back("/cache/dc"); - ui_print("\nWiping Dalvik Cache Directories...\n"); + gui_print("\nWiping Dalvik Cache Directories...\n"); for (unsigned i = 0; i < dir.size(); ++i) { if (stat(dir.at(i).c_str(), &st) == 0) { TWFunc::removeDir(dir.at(i), false); - ui_print("Cleaned: %s...\n", dir.at(i).c_str()); + gui_print("Cleaned: %s...\n", dir.at(i).c_str()); } } TWPartition* sdext = Find_Partition_By_Path("/sd-ext"); @@ -1091,11 +1088,11 @@ int TWPartitionManager::Wipe_Dalvik_Cache(void) { if (sdext->Is_Present && sdext->Mount(false)) { if (stat("/sd-ext/dalvik-cache", &st) == 0) { TWFunc::removeDir("/sd-ext/dalvik-cache", false); - ui_print("Cleaned: /sd-ext/dalvik-cache...\n"); + gui_print("Cleaned: /sd-ext/dalvik-cache...\n"); } } } - ui_print("-- Dalvik Cache Directories Wipe Complete!\n\n"); + gui_print("-- Dalvik Cache Directories Wipe Complete!\n\n"); return true; } @@ -1105,7 +1102,7 @@ int TWPartitionManager::Wipe_Rotate_Data(void) { unlink("/data/misc/akmd*"); unlink("/data/misc/rild*"); - ui_print("Rotation data wiped.\n"); + gui_print("Rotation data wiped.\n"); return true; } @@ -1116,10 +1113,10 @@ int TWPartitionManager::Wipe_Battery_Stats(void) { return false; if (0 != stat("/data/system/batterystats.bin", &st)) { - ui_print("No Battery Stats Found. No Need To Wipe.\n"); + gui_print("No Battery Stats Found. No Need To Wipe.\n"); } else { remove("/data/system/batterystats.bin"); - ui_print("Cleared battery stats.\n"); + gui_print("Cleared battery stats.\n"); } return true; } @@ -1139,7 +1136,7 @@ int TWPartitionManager::Wipe_Android_Secure(void) { if (found) { return ret; } else { - LOGE("No android secure partitions found.\n"); + LOGERR("No android secure partitions found.\n"); } return false; } @@ -1153,7 +1150,7 @@ int TWPartitionManager::Format_Data(void) { return dat->Wipe_Encryption(); } else { - LOGE("Unable to locate /data.\n"); + LOGERR("Unable to locate /data.\n"); return false; } return false; @@ -1164,13 +1161,13 @@ int TWPartitionManager::Wipe_Media_From_Data(void) { if (dat != NULL) { if (!dat->Has_Data_Media) { - LOGE("This device does not have /data/media\n"); + LOGERR("This device does not have /data/media\n"); return false; } if (!dat->Mount(true)) return false; - ui_print("Wiping internal storage -- /data/media...\n"); + gui_print("Wiping internal storage -- /data/media...\n"); TWFunc::removeDir("/data/media", false); if (mkdir("/data/media", S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP) != 0) return -1; @@ -1179,7 +1176,7 @@ int TWPartitionManager::Wipe_Media_From_Data(void) { } return true; } else { - LOGE("Unable to locate /data.\n"); + LOGERR("Unable to locate /data.\n"); return false; } return false; @@ -1194,7 +1191,7 @@ void TWPartitionManager::Update_System_Details(void) { std::vector::iterator iter; int data_size = 0; - ui_print("Updating partition details...\n"); + gui_print("Updating partition details...\n"); for (iter = Partitions.begin(); iter != Partitions.end(); iter++) { if ((*iter)->Can_Be_Mounted) { (*iter)->Update_Size(true); @@ -1304,7 +1301,7 @@ void TWPartitionManager::Update_System_Details(void) { if (current_storage_path == DataManager::GetSettingsStoragePath()) { if (!FreeStorage->Is_Encrypted) { // Not able to use internal, so error! - LOGE("Unable to mount internal storage.\n"); + LOGERR("Unable to mount internal storage.\n"); } DataManager::SetValue(TW_STORAGE_FREE_SIZE, 0); } else { @@ -1315,23 +1312,23 @@ void TWPartitionManager::Update_System_Details(void) { if (FreeStorage != NULL) { DataManager::SetValue(TW_STORAGE_FREE_SIZE, (int)(FreeStorage->Free / 1048576LLU)); } else { - LOGE("Unable to locate internal storage partition.\n"); + LOGERR("Unable to locate internal storage partition.\n"); DataManager::SetValue(TW_STORAGE_FREE_SIZE, 0); } } } else { // No dual storage and unable to mount storage, error! - LOGE("Unable to mount storage.\n"); + LOGERR("Unable to mount storage.\n"); DataManager::SetValue(TW_STORAGE_FREE_SIZE, 0); } } else { DataManager::SetValue(TW_STORAGE_FREE_SIZE, (int)(FreeStorage->Free / 1048576LLU)); } } else { - LOGI("Unable to find storage partition '%s'.\n", current_storage_path.c_str()); + LOGINFO("Unable to find storage partition '%s'.\n", current_storage_path.c_str()); } if (!Write_Fstab()) - LOGE("Error creating fstab\n"); + LOGERR("Error creating fstab\n"); return; } @@ -1384,7 +1381,7 @@ int TWPartitionManager::Decrypt_Device(string Password) { int pwret = cryptfs_check_passwd(cPassword); if (pwret != 0) { - LOGE("Failed to decrypt data.\n"); + LOGERR("Failed to decrypt data.\n"); return -1; } @@ -1393,7 +1390,7 @@ int TWPartitionManager::Decrypt_Device(string Password) { property_get("ro.crypto.fs_crypto_blkdev", crypto_blkdev, "error"); if (strcmp(crypto_blkdev, "error") == 0) { - LOGE("Error retrieving decrypted data block device.\n"); + LOGERR("Error retrieving decrypted data block device.\n"); } else { TWPartition* dat = Find_Partition_By_Path("/data"); if (dat != NULL) { @@ -1402,18 +1399,18 @@ int TWPartitionManager::Decrypt_Device(string Password) { dat->Is_Decrypted = true; dat->Decrypted_Block_Device = crypto_blkdev; dat->Setup_File_System(false); - ui_print("Data successfully decrypted, new block device: '%s'\n", crypto_blkdev); + gui_print("Data successfully decrypted, new block device: '%s'\n", crypto_blkdev); #ifdef CRYPTO_SD_FS_TYPE char crypto_blkdev_sd[255]; property_get("ro.crypto.sd_fs_crypto_blkdev", crypto_blkdev_sd, "error"); if (strcmp(crypto_blkdev_sd, "error") == 0) { - LOGE("Error retrieving decrypted data block device.\n"); + LOGERR("Error retrieving decrypted data block device.\n"); } else if(TWPartition* emmc = Find_Partition_By_Path(EXPAND(TW_INTERNAL_STORAGE_PATH))){ emmc->Is_Decrypted = true; emmc->Decrypted_Block_Device = crypto_blkdev_sd; emmc->Setup_File_System(false); - ui_print("Internal SD successfully decrypted, new block device: '%s'\n", crypto_blkdev_sd); + gui_print("Internal SD successfully decrypted, new block device: '%s'\n", crypto_blkdev_sd); } #endif //ifdef CRYPTO_SD_FS_TYPE #ifdef TW_EXTERNAL_STORAGE_PATH @@ -1453,11 +1450,11 @@ int TWPartitionManager::Decrypt_Device(string Password) { Update_System_Details(); UnMount_Main_Partitions(); } else - LOGE("Unable to locate data partition.\n"); + LOGERR("Unable to locate data partition.\n"); } return 0; #else - LOGE("No crypto support was compiled into this build.\n"); + LOGERR("No crypto support was compiled into this build.\n"); return -1; #endif return 1; @@ -1476,33 +1473,24 @@ int TWPartitionManager::Fix_Permissions(void) { fixPermissions perms; result = perms.fixPerms(true, false); UnMount_Main_Partitions(); - ui_print("Done.\n\n"); + gui_print("Done.\n\n"); return result; } -//partial kangbang from system/vold int TWPartitionManager::Open_Lun_File(string Partition_Path, string Lun_File) { - int fd; TWPartition* Part = Find_Partition_By_Path(Partition_Path); if (Part == NULL) { - LOGE("Unable to locate volume information for USB storage mode."); + LOGERR("Unable to locate volume information for USB storage mode."); return false; } if (!Part->UnMount(true)) return false; - if ((fd = open(Lun_File.c_str(), O_WRONLY)) < 0) { - LOGE("Unable to open ums lunfile '%s': (%s)\n", Lun_File.c_str(), strerror(errno)); + if (TWFunc::write_file(Lun_File, Part->Actual_Block_Device)) { + LOGERR("Unable to write to ums lunfile '%s': (%s)\n", Lun_File.c_str(), strerror(errno)); return false; } - - if (write(fd, Part->Actual_Block_Device.c_str(), Part->Actual_Block_Device.size()) < 0) { - LOGE("Unable to write to ums lunfile '%s': (%s)\n", Lun_File.c_str(), strerror(errno)); - close(fd); - return false; - } - close(fd); return true; } @@ -1547,39 +1535,28 @@ int TWPartitionManager::usb_storage_enable(void) { } int TWPartitionManager::usb_storage_disable(void) { - int fd, index; - char lun_file[255]; + int index, ret; + char lun_file[255], ch[2] = {0, 0}; + string str = ch; for (index=0; index<2; index++) { sprintf(lun_file, CUSTOM_LUN_FILE, index); - - if ((fd = open(lun_file, O_WRONLY)) < 0) { - Mount_All_Storage(); - Update_System_Details(); - if (index == 0) { - LOGE("Unable to open ums lunfile '%s': (%s)", lun_file, strerror(errno)); - return false; - } else - return true; - } - - char ch = 0; - if (write(fd, &ch, 1) < 0) { - close(fd); - Mount_All_Storage(); - Update_System_Details(); - if (index == 0) { - LOGE("Unable to write to ums lunfile '%s': (%s)", lun_file, strerror(errno)); - return false; - } else - return true; + ret = TWFunc::write_file(lun_file, str); + Mount_All_Storage(); + Update_System_Details(); + if (ret < 0) { + break; } - - close(fd); } Mount_All_Storage(); Update_System_Details(); UnMount_Main_Partitions(); + if (ret < 0 && index == 0) { + LOGERR("Unable to write to ums lunfile '%s'.", lun_file); + return false; + } else { + return true; + } return true; } @@ -1595,7 +1572,7 @@ void TWPartitionManager::Mount_All_Storage(void) { void TWPartitionManager::UnMount_Main_Partitions(void) { // Unmounts system and data if data is not data/media // Also unmounts boot if boot is mountable - LOGI("Unmounting main partitions...\n"); + LOGINFO("Unmounting main partitions...\n"); TWPartition* Boot_Partition = Find_Partition_By_Path("/boot"); @@ -1613,14 +1590,14 @@ int TWPartitionManager::Partition_SDCard(void) { int ext, swap, total_size = 0, fat_size; FILE* fp; - ui_print("Partitioning SD Card...\n"); + gui_print("Partitioning SD Card...\n"); #ifdef TW_EXTERNAL_STORAGE_PATH TWPartition* SDCard = Find_Partition_By_Path(EXPAND(TW_EXTERNAL_STORAGE_PATH)); #else TWPartition* SDCard = Find_Partition_By_Path("/sdcard"); #endif if (SDCard == NULL) { - LOGE("Unable to locate device to partition.\n"); + LOGERR("Unable to locate device to partition.\n"); return false; } if (!SDCard->UnMount(true)) @@ -1639,7 +1616,7 @@ int TWPartitionManager::Partition_SDCard(void) { // Find the size of the block device: fp = fopen("/proc/partitions", "rt"); if (fp == NULL) { - LOGE("Unable to open /proc/partitions\n"); + LOGERR("Unable to open /proc/partitions\n"); return false; } @@ -1666,7 +1643,7 @@ int TWPartitionManager::Partition_SDCard(void) { DataManager::GetValue("tw_swap_size", swap); DataManager::GetValue("tw_sdpart_file_system", ext_format); fat_size = total_size - ext - swap; - LOGI("sd card block device is '%s', sdcard size is: %iMB, fat size: %iMB, ext size: %iMB, ext system: '%s', swap size: %iMB\n", Device.c_str(), total_size, fat_size, ext, ext_format.c_str(), swap); + LOGINFO("sd card block device is '%s', sdcard size is: %iMB, fat size: %iMB, ext size: %iMB, ext system: '%s', swap size: %iMB\n", Device.c_str(), total_size, fat_size, ext, ext_format.c_str(), swap); memset(temp, 0, sizeof(temp)); sprintf(temp, "%i", fat_size); fat_str = temp; @@ -1677,40 +1654,40 @@ int TWPartitionManager::Partition_SDCard(void) { sprintf(temp, "%i", fat_size + ext + swap); swap_str = temp; if (ext + swap > total_size) { - LOGE("EXT + Swap size is larger than sdcard size.\n"); + LOGERR("EXT + Swap size is larger than sdcard size.\n"); return false; } - ui_print("Removing partition table...\n"); + gui_print("Removing partition table...\n"); Command = "parted -s " + Device + " mklabel msdos"; - LOGI("Command is: '%s'\n", Command.c_str()); + LOGINFO("Command is: '%s'\n", Command.c_str()); if (TWFunc::Exec_Cmd(Command, result) != 0) { - LOGE("Unable to remove partition table.\n"); + LOGERR("Unable to remove partition table.\n"); Update_System_Details(); return false; } - ui_print("Creating FAT32 partition...\n"); + gui_print("Creating FAT32 partition...\n"); Command = "parted " + Device + " mkpartfs primary fat32 0 " + fat_str + "MB"; - LOGI("Command is: '%s'\n", Command.c_str()); + LOGINFO("Command is: '%s'\n", Command.c_str()); if (TWFunc::Exec_Cmd(Command, result) != 0) { - LOGE("Unable to create FAT32 partition.\n"); + LOGERR("Unable to create FAT32 partition.\n"); return false; } if (ext > 0) { - ui_print("Creating EXT partition...\n"); + gui_print("Creating EXT partition...\n"); Command = "parted " + Device + " mkpartfs primary ext2 " + fat_str + "MB " + ext_str + "MB"; - LOGI("Command is: '%s'\n", Command.c_str()); + LOGINFO("Command is: '%s'\n", Command.c_str()); if (TWFunc::Exec_Cmd(Command, result) != 0) { - LOGE("Unable to create EXT partition.\n"); + LOGERR("Unable to create EXT partition.\n"); Update_System_Details(); return false; } } if (swap > 0) { - ui_print("Creating swap partition...\n"); + gui_print("Creating swap partition...\n"); Command = "parted " + Device + " mkpartfs primary linux-swap " + ext_str + "MB " + swap_str + "MB"; - LOGI("Command is: '%s'\n", Command.c_str()); + LOGINFO("Command is: '%s'\n", Command.c_str()); if (TWFunc::Exec_Cmd(Command, result) != 0) { - LOGE("Unable to create swap partition.\n"); + LOGERR("Unable to create swap partition.\n"); Update_System_Details(); return false; } @@ -1738,17 +1715,17 @@ int TWPartitionManager::Partition_SDCard(void) { #endif if (ext > 0) { if (SDext == NULL) { - LOGE("Unable to locate sd-ext partition.\n"); + LOGERR("Unable to locate sd-ext partition.\n"); return false; } Command = "mke2fs -t " + ext_format + " -m 0 " + SDext->Actual_Block_Device; - ui_print("Formatting sd-ext as %s...\n", ext_format.c_str()); - LOGI("Formatting sd-ext after partitioning, command: '%s'\n", Command.c_str()); + gui_print("Formatting sd-ext as %s...\n", ext_format.c_str()); + LOGINFO("Formatting sd-ext after partitioning, command: '%s'\n", Command.c_str()); TWFunc::Exec_Cmd(Command, result); } Update_System_Details(); - ui_print("Partitioning complete.\n"); + gui_print("Partitioning complete.\n"); return true; } @@ -1816,7 +1793,7 @@ void TWPartitionManager::Get_Partition_List(string ListType, std::vectorpush_back(part); } } else { - LOGE("Unable to locate '%s' partition for restore.\n", restore_path.c_str()); + LOGERR("Unable to locate '%s' partition for restore.\n", restore_path.c_str()); } start_pos = end_pos + 1; end_pos = Restore_List.find(";", start_pos); @@ -1845,7 +1822,7 @@ void TWPartitionManager::Get_Partition_List(string ListType, std::vector #include "libtar/libtar.h" -#include "common.h" +#include "twcommon.h" int flush = 0, eot_count = -1; unsigned char *write_buffer; @@ -73,7 +73,7 @@ ssize_t write_libtar_buffer(int fd, const void *buffer, size_t size) { return 0; } if (write(fd, write_buffer, buffer_loc) != buffer_loc) { - LOGE("Error writing tar file!\n"); + LOGERR("Error writing tar file!\n"); buffer_loc = 0; return -1; } else { diff --git a/twcommon.h b/twcommon.h new file mode 100644 index 000000000..2c96d04e2 --- /dev/null +++ b/twcommon.h @@ -0,0 +1,19 @@ +#ifndef TWCOMMON_HPP +#define TWCOMMON_HPP + +#ifdef __cplusplus +extern "C" { +#endif + +#include "gui/gui.h" +#define LOGERR(...) gui_print("E:" __VA_ARGS__) +#define LOGINFO(...) fprintf(stdout, "I:" __VA_ARGS__) + +#define STRINGIFY(x) #x +#define EXPAND(x) STRINGIFY(x) + +#ifdef __cplusplus +} +#endif + +#endif // TWCOMMON_HPP diff --git a/twinstall.cpp b/twinstall.cpp index e1133c01e..e7d23ecaf 100644 --- a/twinstall.cpp +++ b/twinstall.cpp @@ -1,18 +1,3 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #include #include @@ -25,7 +10,7 @@ #include #include -#include "common.h" +#include "twcommon.h" #include "mincrypt/rsa.h" #include "mincrypt/sha.h" #include "minui/minui.h" @@ -33,290 +18,150 @@ #include "minzip/Zip.h" #include "mtdutils/mounts.h" #include "mtdutils/mtdutils.h" -#include "roots.h" #include "verifier.h" -#include "ui.h" #include "variables.h" #include "data.hpp" #include "partitions.hpp" #include "twrpDigest.hpp" #include "twrp-functions.hpp" +extern "C" { + #include "gui/gui.h" +} -extern RecoveryUI* ui; - -#define ASSUMED_UPDATE_BINARY_NAME "META-INF/com/google/android/update-binary" -#define PUBLIC_KEYS_FILE "/res/keys" - -// Default allocation of progress bar segments to operations -static const int VERIFICATION_PROGRESS_TIME = 60; -static const float VERIFICATION_PROGRESS_FRACTION = 0.25; -static const float DEFAULT_FILES_PROGRESS_FRACTION = 0.4; -static const float DEFAULT_IMAGE_PROGRESS_FRACTION = 0.1; - -enum { INSTALL_SUCCESS, INSTALL_ERROR, INSTALL_CORRUPT }; - -// If the package contains an update binary, extract it and run it. -static int -try_update_binary(const char *path, ZipArchive *zip, int* wipe_cache) { - const ZipEntry* binary_entry = - mzFindZipEntry(zip, ASSUMED_UPDATE_BINARY_NAME); - if (binary_entry == NULL) { - mzCloseZipArchive(zip); - return INSTALL_CORRUPT; - } +static int Run_Update_Binary(const char *path, ZipArchive *Zip, int* wipe_cache) { + const ZipEntry* binary_location = mzFindZipEntry(Zip, ASSUMED_UPDATE_BINARY_NAME); + string Temp_Binary = "/tmp/updater"; + int binary_fd, ret_val, pipe_fd[2], status, zip_verify; + char buffer[1024]; + const char** args = (const char**)malloc(sizeof(char*) * 5); + FILE* child_data; - const char* binary = "/tmp/update_binary"; - unlink(binary); - int fd = creat(binary, 0755); - if (fd < 0) { - mzCloseZipArchive(zip); - LOGE("Can't make %s\n", binary); - return INSTALL_ERROR; - } - bool ok = mzExtractZipEntryToFile(zip, binary_entry, fd); - close(fd); - mzCloseZipArchive(zip); + if (binary_location == NULL) { + mzCloseZipArchive(Zip); + return INSTALL_CORRUPT; + } - if (!ok) { - LOGE("Can't copy %s\n", ASSUMED_UPDATE_BINARY_NAME); - return INSTALL_ERROR; - } + // Delete any existing updater + if (TWFunc::Path_Exists(Temp_Binary) && unlink(Temp_Binary.c_str()) != 0) { + LOGINFO("Unable to unlink '%s'\n", Temp_Binary.c_str()); + } - int pipefd[2]; - pipe(pipefd); + binary_fd = creat(Temp_Binary.c_str(), 0755); + if (binary_fd < 0) { + mzCloseZipArchive(Zip); + LOGERR("Could not create file for updater extract in '%s'\n", Temp_Binary.c_str()); + return INSTALL_ERROR; + } - // When executing the update binary contained in the package, the - // arguments passed are: - // - // - the version number for this interface - // - // - an fd to which the program can write in order to update the - // progress bar. The program can write single-line commands: - // - // progress - // fill up the next part of of the progress bar - // over seconds. If is zero, use - // set_progress commands to manually control the - // progress of this segment of the bar - // - // set_progress - // should be between 0.0 and 1.0; sets the - // progress bar within the segment defined by the most - // recent progress command. - // - // firmware <"hboot"|"radio"> - // arrange to install the contents of in the - // given partition on reboot. - // - // (API v2: may start with "PACKAGE:" to - // indicate taking a file from the OTA package.) - // - // (API v3: this command no longer exists.) - // - // ui_print - // display on the screen. - // - // - the name of the package zip file. - // + ret_val = mzExtractZipEntryToFile(Zip, binary_location, binary_fd); + close(binary_fd); + mzCloseZipArchive(Zip); - const char** args = (const char**)malloc(sizeof(char*) * 5); - args[0] = binary; - args[1] = EXPAND(RECOVERY_API_VERSION); // defined in Android.mk - char* temp = (char*)malloc(10); - sprintf(temp, "%d", pipefd[1]); - args[2] = temp; - args[3] = (char*)path; - args[4] = NULL; + if (!ret_val) { + LOGERR("Could not extract '%s'\n", ASSUMED_UPDATE_BINARY_NAME); + return INSTALL_ERROR; + } - pid_t pid = fork(); - if (pid == 0) { - close(pipefd[0]); - execv(binary, (char* const*)args); - fprintf(stdout, "E:Can't run %s (%s)\n", binary, strerror(errno)); - _exit(-1); - } - close(pipefd[1]); + pipe(pipe_fd); + + args[0] = Temp_Binary.c_str(); + args[1] = EXPAND(RECOVERY_API_VERSION); + char* temp = (char*)malloc(10); + sprintf(temp, "%d", pipe_fd[1]); + args[2] = temp; + args[3] = (char*)path; + args[4] = NULL; + + pid_t pid = fork(); + if (pid == 0) { + close(pipe_fd[0]); + execv(Temp_Binary.c_str(), (char* const*)args); + printf("E:Can't execute '%s'\n", Temp_Binary.c_str()); + _exit(-1); + } + close(pipe_fd[1]); - *wipe_cache = 0; + *wipe_cache = 0; - char buffer[1024]; - FILE* from_child = fdopen(pipefd[0], "r"); - while (fgets(buffer, sizeof(buffer), from_child) != NULL) { - char* command = strtok(buffer, " \n"); + DataManager::GetValue(TW_SIGNED_ZIP_VERIFY_VAR, zip_verify); + child_data = fdopen(pipe_fd[0], "r"); + while (fgets(buffer, sizeof(buffer), child_data) != NULL) { + char* command = strtok(buffer, " \n"); if (command == NULL) { continue; } else if (strcmp(command, "progress") == 0) { - char* fraction_s = strtok(NULL, " \n"); - char* seconds_s = strtok(NULL, " \n"); + char* fraction_char = strtok(NULL, " \n"); + char* seconds_char = strtok(NULL, " \n"); - float fraction = strtof(fraction_s, NULL); - int seconds = strtol(seconds_s, NULL, 10); + float fraction_float = strtof(fraction_char, NULL); + int seconds_float = strtol(seconds_char, NULL, 10); - ui->ShowProgress(fraction * (1-VERIFICATION_PROGRESS_FRACTION), seconds); + if (zip_verify) + DataManager::ShowProgress(fraction_float * (1 - VERIFICATION_PROGRESS_FRACTION), seconds_float); + else + DataManager::ShowProgress(fraction_float, seconds_float); } else if (strcmp(command, "set_progress") == 0) { - char* fraction_s = strtok(NULL, " \n"); - float fraction = strtof(fraction_s, NULL); - ui->SetProgress(fraction); + char* fraction_char = strtok(NULL, " \n"); + float fraction_float = strtof(fraction_char, NULL); + DataManager::SetProgress(fraction_float); } else if (strcmp(command, "ui_print") == 0) { - char* str = strtok(NULL, "\n"); - if (str) { - ui->Print("%s", str); + char* display_value = strtok(NULL, "\n"); + if (display_value) { + gui_print("%s", display_value); } else { - ui->Print("\n"); + gui_print("\n"); } } else if (strcmp(command, "wipe_cache") == 0) { *wipe_cache = 1; } else if (strcmp(command, "clear_display") == 0) { - //ui->SetBackground(RecoveryUI::NONE); + // Do nothing, not supported by TWRP } else { - LOGE("unknown command [%s]\n", command); - } - } - fclose(from_child); - - int status; - waitpid(pid, &status, 0); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { - LOGE("Error in %s\n(Status %d)\n", path, WEXITSTATUS(status)); - return INSTALL_ERROR; - } - - return INSTALL_SUCCESS; -} - -// Reads a file containing one or more public keys as produced by -// DumpPublicKey: this is an RSAPublicKey struct as it would appear -// as a C source literal, eg: -// -// "{64,0xc926ad21,{1795090719,...,-695002876},{-857949815,...,1175080310}}" -// -// (Note that the braces and commas in this example are actual -// characters the parser expects to find in the file; the ellipses -// indicate more numbers omitted from this example.) -// -// The file may contain multiple keys in this format, separated by -// commas. The last key must not be followed by a comma. -// -// Returns NULL if the file failed to parse, or if it contain zero keys. -static RSAPublicKey* -load_keys(const char* filename, int* numKeys) { - RSAPublicKey* out = NULL; - *numKeys = 0; - - FILE* f = fopen(filename, "r"); - if (f == NULL) { - LOGE("opening %s: %s\n", filename, strerror(errno)); - goto exit; - } - - { - int i; - bool done = false; - while (!done) { - ++*numKeys; - out = (RSAPublicKey*)realloc(out, *numKeys * sizeof(RSAPublicKey)); - RSAPublicKey* key = out + (*numKeys - 1); - if (fscanf(f, " { %i , 0x%x , { %u", - &(key->len), &(key->n0inv), &(key->n[0])) != 3) { - goto exit; - } - if (key->len != RSANUMWORDS) { - LOGE("key length (%d) does not match expected size\n", key->len); - goto exit; - } - for (i = 1; i < key->len; ++i) { - if (fscanf(f, " , %u", &(key->n[i])) != 1) goto exit; - } - if (fscanf(f, " } , { %u", &(key->rr[0])) != 1) goto exit; - for (i = 1; i < key->len; ++i) { - if (fscanf(f, " , %u", &(key->rr[i])) != 1) goto exit; - } - fscanf(f, " } } "); - - // if the line ends in a comma, this file has more keys. - switch (fgetc(f)) { - case ',': - // more keys to come. - break; - - case EOF: - done = true; - break; - - default: - LOGE("unexpected character between keys\n"); - goto exit; - } + LOGERR("unknown command [%s]\n", command); } - } + } + fclose(child_data); - fclose(f); - return out; + waitpid(pid, &status, 0); + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { + LOGERR("Error executing updater binary in zip '%s'\n", path); + return INSTALL_ERROR; + } -exit: - if (f) fclose(f); - free(out); - *numKeys = 0; - return NULL; + return INSTALL_SUCCESS; } extern "C" int TWinstall_zip(const char* path, int* wipe_cache) { - int err, zip_verify, md5_return; + int ret_val, zip_verify, md5_return, key_count; twrpDigest md5sum; string strpath = path; - ui_print("Installing '%s'...\n", path); + ZipArchive Zip; - if (!PartitionManager.Mount_By_Path(path, 0)) { - LOGE("Failed to mount '%s'\n", path); - return -1; - } - - ui_print("Checking for MD5 file...\n"); + gui_print("Installing '%s'...\nChecking for MD5 file...\n", path); md5sum.setfn(strpath); md5_return = md5sum.verify_md5digest(); if (md5_return == -2) { // MD5 did not match. - LOGE("Zip MD5 does not match.\nUnable to install zip.\n"); + LOGERR("Zip MD5 does not match.\nUnable to install zip.\n"); return INSTALL_CORRUPT; } else if (md5_return == -1) { - ui_print("Skipping MD5 check: no MD5 file found.\n"); + gui_print("Skipping MD5 check: no MD5 file found.\n"); } else if (md5_return == 0) - ui_print("Zip MD5 matched.\n"); // MD5 found and matched. + gui_print("Zip MD5 matched.\n"); // MD5 found and matched. DataManager::GetValue(TW_SIGNED_ZIP_VERIFY_VAR, zip_verify); + DataManager::SetProgress(0); if (zip_verify) { - ui_print("Verifying zip signature...\n"); - int numKeys; - RSAPublicKey* loadedKeys = load_keys(PUBLIC_KEYS_FILE, &numKeys); - if (loadedKeys == NULL) { - LOGE("Failed to load keys\n"); - return -1; - } - LOGI("%d key(s) loaded from %s\n", numKeys, PUBLIC_KEYS_FILE); - - // Give verification half the progress bar... - ui->Print("Verifying update package...\n"); - ui->SetProgressType(RecoveryUI::DETERMINATE); - ui->ShowProgress(VERIFICATION_PROGRESS_FRACTION, VERIFICATION_PROGRESS_TIME); - - err = verify_file(path, loadedKeys, numKeys); - free(loadedKeys); - LOGI("verify_file returned %d\n", err); - if (err != VERIFY_SUCCESS) { - LOGE("signature verification failed\n"); + gui_print("Verifying zip signature...\n"); + ret_val = verify_file(path); + if (ret_val != VERIFY_SUCCESS) { + LOGERR("Zip signature verification failed: %i\n", ret_val); return -1; } } - /* Try to open the package. - */ - ZipArchive zip; - err = mzOpenZipArchive(path, &zip); - if (err != 0) { - LOGE("Can't open %s\n(%s)\n", path, err != -1 ? strerror(err) : "bad"); - return INSTALL_CORRUPT; - } - - /* Verify and install the contents of the package. - */ - return try_update_binary(path, &zip, wipe_cache); + ret_val = mzOpenZipArchive(path, &Zip); + if (ret_val != 0) { + LOGERR("Zip file is corrupt!\n", path); + return INSTALL_CORRUPT; + } + return Run_Update_Binary(path, &Zip, wipe_cache); } diff --git a/twinstall.h b/twinstall.h index 8fd940e37..ea467a2b9 100644 --- a/twinstall.h +++ b/twinstall.h @@ -1,23 +1,5 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef RECOVERY_INSTALL_H_ -#define RECOVERY_INSTALL_H_ - -#include "common.h" +#ifndef RECOVERY_TWINSTALL_H_ +#define RECOVERY_TWINSTALL_H_ #ifdef __cplusplus extern "C" { @@ -29,4 +11,4 @@ int TWinstall_zip(const char* path, int* wipe_cache); } #endif -#endif // RECOVERY_INSTALL_H_ +#endif // RECOVERY_TWINSTALL_H_ diff --git a/twrp-functions.cpp b/twrp-functions.cpp index 76ee93a1e..a0194b379 100644 --- a/twrp-functions.cpp +++ b/twrp-functions.cpp @@ -19,18 +19,16 @@ #include #include "twrp-functions.hpp" #include "partitions.hpp" -#include "common.h" +#include "twcommon.h" #include "data.hpp" -#include "bootloader.h" #include "variables.h" +#include "bootloader.h" extern "C" { #include "libcrecovery/common.h" } - /* Execute a command */ - int TWFunc::Exec_Cmd(string cmd, string &result) { FILE* exec; char buffer[130]; @@ -96,33 +94,33 @@ void TWFunc::install_htc_dumlock(void) { if (!PartitionManager.Mount_By_Path("/data", true)) return; - ui_print("Installing HTC Dumlock to system...\n"); + gui_print("Installing HTC Dumlock to system...\n"); copy_file("/res/htcd/htcdumlocksys", "/system/bin/htcdumlock", 0755); if (!Path_Exists("/system/bin/flash_image")) { - ui_print("Installing flash_image...\n"); + gui_print("Installing flash_image...\n"); copy_file("/res/htcd/flash_imagesys", "/system/bin/flash_image", 0755); need_libs = 1; } else - ui_print("flash_image is already installed, skipping...\n"); + gui_print("flash_image is already installed, skipping...\n"); if (!Path_Exists("/system/bin/dump_image")) { - ui_print("Installing dump_image...\n"); + gui_print("Installing dump_image...\n"); copy_file("/res/htcd/dump_imagesys", "/system/bin/dump_image", 0755); need_libs = 1; } else - ui_print("dump_image is already installed, skipping...\n"); + gui_print("dump_image is already installed, skipping...\n"); if (need_libs) { - ui_print("Installing libs needed for flash_image and dump_image...\n"); + gui_print("Installing libs needed for flash_image and dump_image...\n"); copy_file("/res/htcd/libbmlutils.so", "/system/lib/libbmlutils.so", 0755); copy_file("/res/htcd/libflashutils.so", "/system/lib/libflashutils.so", 0755); copy_file("/res/htcd/libmmcutils.so", "/system/lib/libmmcutils.so", 0755); copy_file("/res/htcd/libmtdutils.so", "/system/lib/libmtdutils.so", 0755); } - ui_print("Installing HTC Dumlock app...\n"); + gui_print("Installing HTC Dumlock app...\n"); mkdir("/data/app", 0777); unlink("/data/app/com.teamwin.htcdumlock*"); copy_file("/res/htcd/HTCDumlock.apk", "/data/app/com.teamwin.htcdumlock.apk", 0777); sync(); - ui_print("HTC Dumlock is installed.\n"); + gui_print("HTC Dumlock is installed.\n"); } void TWFunc::htc_dumlock_restore_original_boot(void) { @@ -130,18 +128,18 @@ void TWFunc::htc_dumlock_restore_original_boot(void) { if (!PartitionManager.Mount_By_Path("/sdcard", true)) return; - ui_print("Restoring original boot...\n"); + gui_print("Restoring original boot...\n"); Exec_Cmd("htcdumlock restore", status); - ui_print("Original boot restored.\n"); + gui_print("Original boot restored.\n"); } void TWFunc::htc_dumlock_reflash_recovery_to_boot(void) { string status; if (!PartitionManager.Mount_By_Path("/sdcard", true)) return; - ui_print("Reflashing recovery to boot...\n"); + gui_print("Reflashing recovery to boot...\n"); Exec_Cmd("htcdumlock recovery noreboot", status); - ui_print("Recovery is flashed to boot.\n"); + gui_print("Recovery is flashed to boot.\n"); } int TWFunc::Recursive_Mkdir(string Path) { @@ -153,7 +151,7 @@ int TWFunc::Recursive_Mkdir(string Path) { { wholePath = pathCpy.substr(0, pos); if (mkdir(wholePath.c_str(), 0777) && errno != EEXIST) { - LOGE("Unable to create folder: %s (errno=%d)\n", wholePath.c_str(), errno); + LOGERR("Unable to create folder: %s (errno=%d)\n", wholePath.c_str(), errno); return false; } @@ -174,8 +172,8 @@ unsigned long long TWFunc::Get_Folder_Size(const string& Path, bool Display_Erro d = opendir(Path.c_str()); if (d == NULL) { - LOGE("error opening '%s'\n", Path.c_str()); - LOGE("error: %s\n", strerror(errno)); + LOGERR("error opening '%s'\n", Path.c_str()); + LOGERR("error: %s\n", strerror(errno)); return 0; } @@ -236,81 +234,62 @@ unsigned long TWFunc::Get_File_Size(string Path) { return st.st_size; } -static const char *COMMAND_FILE = "/cache/recovery/command"; -static const char *INTENT_FILE = "/cache/recovery/intent"; -static const char *LOG_FILE = "/cache/recovery/log"; -static const char *LAST_LOG_FILE = "/cache/recovery/last_log"; -static const char *LAST_INSTALL_FILE = "/cache/recovery/last_install"; -static const char *CACHE_ROOT = "/cache"; -static const char *SDCARD_ROOT = "/sdcard"; -static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log"; -static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install"; - -// close a file, log an error if the error indicator is set -void TWFunc::check_and_fclose(FILE *fp, const char *name) { - fflush(fp); - if (ferror(fp)) LOGE("Error in %s\n(%s)\n", name, strerror(errno)); - fclose(fp); -} - -void TWFunc::copy_log_file(const char* source, const char* destination, int append) { - FILE *log = fopen_path(destination, append ? "a" : "w"); - if (log == NULL) { - LOGE("Can't open %s\n", destination); +void TWFunc::Copy_Log(string Source, string Destination) { + FILE *destination_log = fopen(Destination.c_str(), "a"); + if (destination_log == NULL) { + LOGERR("TWFunc::Copy_Log -- Can't open destination log file: '%s'\n", Destination.c_str()); } else { - FILE *tmplog = fopen(source, "r"); - if (tmplog != NULL) { - if (append) { - fseek(tmplog, tmplog_offset, SEEK_SET); // Since last write - } - char buf[4096]; - while (fgets(buf, sizeof(buf), tmplog)) fputs(buf, log); - if (append) { - tmplog_offset = ftell(tmplog); - } - check_and_fclose(tmplog, source); + FILE *source_log = fopen(Source.c_str(), "r"); + if (source_log != NULL) { + fseek(source_log, Log_Offset, SEEK_SET); + char buffer[4096]; + while (fgets(buffer, sizeof(buffer), source_log)) + fputs(buffer, destination_log); // Buffered write of log file + Log_Offset = ftell(source_log); + fflush(source_log); + fclose(source_log); } - check_and_fclose(log, destination); + fflush(destination_log); + fclose(destination_log); } } -// clear the recovery command and prepare to boot a (hopefully working) system, -// copy our log file to cache as well (for the system to read), and -// record any intent we were asked to communicate back to the system. -// this function is idempotent: call it as many times as you like. -void TWFunc::twfinish_recovery(const char *send_intent) { - // By this point, we're ready to return to the main system... - if (send_intent != NULL) { - FILE *fp = fopen_path(INTENT_FILE, "w"); - if (fp == NULL) { - LOGE("Can't open %s\n", INTENT_FILE); - } else { - fputs(send_intent, fp); - check_and_fclose(fp, INTENT_FILE); - } +void TWFunc::Update_Log_File(void) { + // Copy logs to cache so the system can find out what happened. + Copy_Log(TMP_LOG_FILE, "/cache/recovery/log"); + copy_file("/cache/recovery/log", "/cache/recovery/last_log", 600); + chown("/cache/recovery/log", 1000, 1000); + chmod("/cache/recovery/log", 0600); + chmod("/cache/recovery/last_log", 0640); + + // Reset bootloader message + TWPartition* Part = PartitionManager.Find_Partition_By_Path("/misc"); + if (Part != NULL) { + struct bootloader_message boot; + memset(&boot, 0, sizeof(boot)); + if (Part->Current_File_System == "mtd") { + if (set_bootloader_message_mtd_name(&boot, Part->MTD_Name.c_str()) != 0) + LOGERR("Unable to set MTD bootloader message.\n"); + } else if (Part->Current_File_System == "emmc") { + if (set_bootloader_message_block_name(&boot, Part->Actual_Block_Device.c_str()) != 0) + LOGERR("Unable to set emmc bootloader message.\n"); + } else { + LOGERR("Unknown file system for /misc: '%s'\n", Part->Current_File_System.c_str()); + } } - // Copy logs to cache so the system can find out what happened. - copy_log_file(TEMPORARY_LOG_FILE, LOG_FILE, true); - copy_log_file(TEMPORARY_LOG_FILE, LAST_LOG_FILE, false); - copy_log_file(TEMPORARY_INSTALL_FILE, LAST_INSTALL_FILE, false); - chmod(LOG_FILE, 0600); - chown(LOG_FILE, 1000, 1000); // system user - chmod(LAST_LOG_FILE, 0640); - chmod(LAST_INSTALL_FILE, 0644); - - // Reset to normal system boot so recovery won't cycle indefinitely. - struct bootloader_message boot; - memset(&boot, 0, sizeof(boot)); - set_bootloader_message(&boot); - - // Remove the command file, so recovery won't repeat indefinitely. - if (!PartitionManager.Mount_By_Path("/system", true) || (unlink(COMMAND_FILE) && errno != ENOENT)) { - LOGW("Can't unlink %s\n", COMMAND_FILE); + if (!PartitionManager.Mount_By_Path("/cache", true) || (unlink("/cache/recovery/command") && errno != ENOENT)) { + LOGINFO("Can't unlink %s\n", "/cache/recovery/command"); } PartitionManager.UnMount_By_Path("/cache", true); - sync(); // For good measure. + sync(); +} + +void TWFunc::Update_Intent_File(string Intent) { + if (PartitionManager.Mount_By_Path("/cache", false) && !Intent.empty()) { + TWFunc::write_file("/cache/recovery/intent", Intent); + } } // reboot: Reboot the system. Return -1 on error, no return on success @@ -319,32 +298,31 @@ int TWFunc::tw_reboot(RebootCommand command) // Always force a sync before we reboot sync(); - switch (command) - { - case rb_current: - case rb_system: - twfinish_recovery("s"); - sync(); - check_and_run_script("/sbin/rebootsystem.sh", "reboot system"); - return reboot(RB_AUTOBOOT); - case rb_recovery: - check_and_run_script("/sbin/rebootrecovery.sh", "reboot recovery"); - return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery"); - case rb_bootloader: - check_and_run_script("/sbin/rebootbootloader.sh", "reboot bootloader"); - return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader"); - case rb_poweroff: - check_and_run_script("/sbin/poweroff.sh", "power off"); + switch (command) { + case rb_current: + case rb_system: + Update_Log_File(); + Update_Intent_File("s"); + sync(); + check_and_run_script("/sbin/rebootsystem.sh", "reboot system"); + return reboot(RB_AUTOBOOT); + case rb_recovery: + check_and_run_script("/sbin/rebootrecovery.sh", "reboot recovery"); + return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery"); + case rb_bootloader: + check_and_run_script("/sbin/rebootbootloader.sh", "reboot bootloader"); + return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader"); + case rb_poweroff: + check_and_run_script("/sbin/poweroff.sh", "power off"); #ifdef ANDROID_RB_POWEROFF - android_reboot(ANDROID_RB_POWEROFF, 0, 0); + android_reboot(ANDROID_RB_POWEROFF, 0, 0); #endif - return reboot(RB_POWER_OFF); - case rb_download: - check_and_run_script("/sbin/rebootdownload.sh", "reboot download"); - return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "download"); - return 1; - default: - return -1; + return reboot(RB_POWER_OFF); + case rb_download: + check_and_run_script("/sbin/rebootdownload.sh", "reboot download"); + return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "download"); + default: + return -1; } return -1; } @@ -355,10 +333,10 @@ void TWFunc::check_and_run_script(const char* script_file, const char* display_n struct stat st; string result; if (stat(script_file, &st) == 0) { - ui_print("Running %s script...\n", display_name); + gui_print("Running %s script...\n", display_name); chmod(script_file, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); TWFunc::Exec_Cmd(script_file, result); - ui_print("\nFinished running %s script.\n", display_name); + gui_print("\nFinished running %s script.\n", display_name); } } @@ -368,7 +346,7 @@ int TWFunc::removeDir(const string path, bool skipParent) { string new_path; if (d == NULL) { - LOGE("Error opening '%s'\n", path.c_str()); + LOGERR("Error opening '%s'\n", path.c_str()); return -1; } @@ -385,12 +363,12 @@ int TWFunc::removeDir(const string path, bool skipParent) { if (p->d_type == DT_DIR) r = rmdir(new_path.c_str()); else - LOGI("Unable to removeDir '%s': %s\n", new_path.c_str(), strerror(errno)); + LOGINFO("Unable to removeDir '%s': %s\n", new_path.c_str(), strerror(errno)); } } else if (p->d_type == DT_REG || p->d_type == DT_LNK || p->d_type == DT_FIFO || p->d_type == DT_SOCK) { r = unlink(new_path.c_str()); if (r != 0) { - LOGI("Unable to unlink '%s: %s'\n", new_path.c_str(), strerror(errno)); + LOGINFO("Unable to unlink '%s: %s'\n", new_path.c_str(), strerror(errno)); } } } @@ -407,7 +385,7 @@ int TWFunc::removeDir(const string path, bool skipParent) { } int TWFunc::copy_file(string src, string dst, int mode) { - LOGI("Copying file %s to %s\n", src.c_str(), dst.c_str()); + LOGINFO("Copying file %s to %s\n", src.c_str(), dst.c_str()); ifstream srcfile(src.c_str(), ios::binary); ofstream dstfile(dst.c_str(), ios::binary); dstfile << srcfile.rdbuf(); @@ -447,7 +425,7 @@ int TWFunc::read_file(string fn, string& results) { file.close(); return 0; } - LOGI("Cannot find file %s\n", fn.c_str()); + LOGINFO("Cannot find file %s\n", fn.c_str()); return -1; } @@ -461,7 +439,7 @@ int TWFunc::read_file(string fn, vector& results) { file.close(); return 0; } - LOGI("Cannot find file %s\n", fn.c_str()); + LOGINFO("Cannot find file %s\n", fn.c_str()); return -1; } @@ -473,7 +451,7 @@ int TWFunc::write_file(string fn, string& line) { fclose(file); return 0; } - LOGI("Cannot find file %s\n", fn.c_str()); + LOGINFO("Cannot find file %s\n", fn.c_str()); return -1; } @@ -531,44 +509,44 @@ bool TWFunc::Fix_su_Perms(void) { string file = "/system/bin/su"; if (TWFunc::Path_Exists(file)) { if (chown(file.c_str(), 0, 0) != 0) { - LOGE("Failed to chown '%s'\n", file.c_str()); + LOGERR("Failed to chown '%s'\n", file.c_str()); return false; } if (tw_chmod(file, "6755") != 0) { - LOGE("Failed to chmod '%s'\n", file.c_str()); + LOGERR("Failed to chmod '%s'\n", file.c_str()); return false; } } file = "/system/xbin/su"; if (TWFunc::Path_Exists(file)) { if (chown(file.c_str(), 0, 0) != 0) { - LOGE("Failed to chown '%s'\n", file.c_str()); + LOGERR("Failed to chown '%s'\n", file.c_str()); return false; } if (tw_chmod(file, "6755") != 0) { - LOGE("Failed to chmod '%s'\n", file.c_str()); + LOGERR("Failed to chmod '%s'\n", file.c_str()); return false; } } file = "/system/bin/.ext/.su"; if (TWFunc::Path_Exists(file)) { if (chown(file.c_str(), 0, 0) != 0) { - LOGE("Failed to chown '%s'\n", file.c_str()); + LOGERR("Failed to chown '%s'\n", file.c_str()); return false; } if (tw_chmod(file, "6755") != 0) { - LOGE("Failed to chmod '%s'\n", file.c_str()); + LOGERR("Failed to chmod '%s'\n", file.c_str()); return false; } } file = "/system/app/Superuser.apk"; if (TWFunc::Path_Exists(file)) { if (chown(file.c_str(), 0, 0) != 0) { - LOGE("Failed to chown '%s'\n", file.c_str()); + LOGERR("Failed to chown '%s'\n", file.c_str()); return false; } if (tw_chmod(file, "0644") != 0) { - LOGE("Failed to chmod '%s'\n", file.c_str()); + LOGERR("Failed to chmod '%s'\n", file.c_str()); return false; } } @@ -677,7 +655,7 @@ int TWFunc::tw_chmod(string fn, string mode) { } if (chmod(fn.c_str(), mask) != 0) { - LOGE("Unable to chmod '%s' %l\n", fn.c_str(), mask); + LOGERR("Unable to chmod '%s' %l\n", fn.c_str(), mask); return -1; } @@ -689,11 +667,11 @@ bool TWFunc::Install_SuperSU(void) { return false; if (copy_file("/supersu/su", "/system/xbin/su", 0755) != 0) { - LOGE("Failed to copy su binary to /system/bin\n"); + LOGERR("Failed to copy su binary to /system/bin\n"); return false; } if (copy_file("/supersu/Superuser.apk", "/system/app/Superuser.apk", 0644) != 0) { - LOGE("Failed to copy Superuser app to /system/app\n"); + LOGERR("Failed to copy Superuser app to /system/app\n"); return false; } if (!Fix_su_Perms()) diff --git a/twrp-functions.hpp b/twrp-functions.hpp index 042c56722..8e31e4242 100644 --- a/twrp-functions.hpp +++ b/twrp-functions.hpp @@ -2,6 +2,7 @@ #define _TWRPFUNCTIONS_HPP #include +#include using namespace std; @@ -32,7 +33,8 @@ public: static void GUI_Operation_Text(string Read_Value, string Default_Text); // Updates text for display in the GUI, e.g. Backing up %partition name% static void GUI_Operation_Text(string Read_Value, string Partition_Name, string Default_Text); // Same as above but includes partition name static unsigned long Get_File_Size(string Path); // Returns the size of a file - static void twfinish_recovery(const char *send_intent); // Writes the log to last_log + static void Update_Log_File(void); // Writes the log to last_log + static void Update_Intent_File(string Intent); // Updates intent file static int tw_reboot(RebootCommand command); // Prepares the device for rebooting static void check_and_run_script(const char* script_file, const char* display_name); // checks for the existence of a script, chmods it to 755, then runs it static int Exec_Cmd(string cmd, string &result); //execute a command and return the result as a string by reference @@ -50,9 +52,10 @@ public: static bool Install_SuperSU(void); // Installs su binary and apk and sets proper permissions private: - static void check_and_fclose(FILE *fp, const char *name); - static void copy_log_file(const char* source, const char* destination, int append); + static void Copy_Log(string Source, string Destination); }; +extern int Log_Offset; + #endif // _TWRPFUNCTIONS_HPP diff --git a/twrp.cpp b/twrp.cpp new file mode 100644 index 000000000..938a07adf --- /dev/null +++ b/twrp.cpp @@ -0,0 +1,241 @@ +/* + Copyright 2013 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "cutils/properties.h" +extern "C" { +#include "minadbd/adb.h" +} + +#ifdef ANDROID_RB_RESTART +#include "cutils/android_reboot.h" +#else +#include +#endif + +extern "C" { +#include "gui/gui.h" +} +#include "twcommon.h" +#include "twrp-functions.hpp" +#include "data.hpp" +#include "partitions.hpp" +#include "openrecoveryscript.hpp" +#include "variables.h" + +TWPartitionManager PartitionManager; +int Log_Offset; + +static void Print_Prop(const char *key, const char *name, void *cookie) { + printf("%s=%s\n", key, name); +} + +int main(int argc, char **argv) { + // Recovery needs to install world-readable files, so clear umask + // set by init + umask(0); + + Log_Offset = 0; + + // Set up temporary log file (/tmp/recovery.log) + freopen(TMP_LOG_FILE, "a", stdout); + setbuf(stdout, NULL); + freopen(TMP_LOG_FILE, "a", stderr); + setbuf(stderr, NULL); + + // Handle ADB sideload + if (argc == 3 && strcmp(argv[1], "--adbd") == 0) { + adb_main(argv[2]); + return 0; + } + + time_t StartupTime = time(NULL); + printf("Starting TWRP %s on %s", TW_VERSION_STR, ctime(&StartupTime)); + + // Load default values to set DataManager constants and handle ifdefs + DataManager::SetDefaultValues(); + printf("Starting the UI..."); + gui_init(); + printf("=> Linking mtab\n"); + symlink("/proc/mounts", "/etc/mtab"); + printf("=> Processing recovery.fstab\n"); + if (!PartitionManager.Process_Fstab("/etc/recovery.fstab", 1)) { + LOGERR("Failing out of recovery due to problem with recovery.fstab.\n"); + return -1; + } + PartitionManager.Output_Partition_Logging(); + // Load up all the resources + gui_loadResources(); + + PartitionManager.Mount_By_Path("/cache", true); + + string Zip_File, Reboot_Value; + bool Cache_Wipe = false, Factory_Reset = false, Perform_Backup = false; + + int index, index2; + char* ptr; + printf("Startup Commands: "); + for (index = 1; index < argc; index++) { + printf(" '%s'", argv[index]); + if (*argv[index] == 'u') { + ptr = argv[index]; + index2 = 0; + while (*ptr != '=' && *ptr != '\n') + ptr++; + if (*ptr) { + Zip_File = ptr; + } else + LOGERR("argument error specifying zip file\n"); + } else if (*argv[index] == 'c') { + Cache_Wipe = true; + } else if (*argv[index] == 'w') { + Factory_Reset = true; + } else if (*argv[index] == 'n') { + Perform_Backup = true; + } else if (*argv[index] == 's') { + ptr = argv[index]; + index2 = 0; + while (*ptr != '=' && *ptr != '\n') + ptr++; + if (*ptr) { + Reboot_Value = *ptr; + } + } + } + + char twrp_booted[PROPERTY_VALUE_MAX]; + property_get("ro.twrp.boot", twrp_booted, "0"); + if (strcmp(twrp_booted, "0") != 0) { + property_list(Print_Prop, NULL); + printf("\n"); + property_set("ro.twrp.boot", "1"); + } + + // Check for and run startup script if script exists + TWFunc::check_and_run_script("/sbin/runatboot.sh", "boot"); + TWFunc::check_and_run_script("/sbin/postrecoveryboot.sh", "boot"); + +#ifdef TW_INCLUDE_INJECTTWRP + // Back up TWRP Ramdisk if needed: + TWPartition* Boot = PartitionManager.Find_Partition_By_Path("/boot"); + string result; + LOGINFO("Backing up TWRP ramdisk...\n"); + if (Boot == NULL || Boot->Current_File_System != "emmc") + TWFunc::Exec_Cmd("injecttwrp --backup /tmp/backup_recovery_ramdisk.img", result); + else { + string injectcmd = "injecttwrp --backup /tmp/backup_recovery_ramdisk.img bd=" + Boot->Actual_Block_Device; + TWFunc::Exec_Cmd(injectcmd, result); + } + LOGINFO("Backup of TWRP ramdisk done.\n"); +#endif + + bool Keep_Going = true; + if (Perform_Backup) { + DataManager::SetValue(TW_BACKUP_NAME, "(Current Date)"); + if (!OpenRecoveryScript::Insert_ORS_Command("backup BSDCAE\n")) + Keep_Going = false; + } + if (Keep_Going && !Zip_File.empty()) { + string ORSCommand = "install " + Zip_File; + + if (!OpenRecoveryScript::Insert_ORS_Command(ORSCommand)) + Keep_Going = false; + } + if (Keep_Going) { + if (Factory_Reset) { + if (!OpenRecoveryScript::Insert_ORS_Command("wipe data\n")) + Keep_Going = false; + } else if (Cache_Wipe) { + if (!OpenRecoveryScript::Insert_ORS_Command("wipe cache\n")) + Keep_Going = false; + } + } + + TWFunc::Update_Log_File(); + // Offer to decrypt if the device is encrypted + if (DataManager::GetIntValue(TW_IS_ENCRYPTED) != 0) { + LOGINFO("Is encrypted, do decrypt page first\n"); + if (gui_startPage("decrypt") != 0) { + LOGERR("Failed to start decrypt GUI page.\n"); + } + } + + // Read the settings file + DataManager::ReadSettingsFile(); + // Run any outstanding OpenRecoveryScript + if (DataManager::GetIntValue(TW_IS_ENCRYPTED) == 0 && (TWFunc::Path_Exists(SCRIPT_FILE_TMP) || TWFunc::Path_Exists(SCRIPT_FILE_CACHE))) { + OpenRecoveryScript::Run_OpenRecoveryScript(); + } + // Launch the main GUI + gui_start(); + + // Check for su to see if the device is rooted or not + if (PartitionManager.Mount_By_Path("/system", false)) { + // Disable flashing of stock recovery + if (TWFunc::Path_Exists("/system/recovery-from-boot.p")) { + rename("/system/recovery-from-boot.p", "/system/recovery-from-boot.bak"); + gui_print("Renamed stock recovery file in /system to prevent\nthe stock ROM from replacing TWRP.\n"); + } + if (TWFunc::Path_Exists("/supersu/su") && !TWFunc::Path_Exists("/system/bin/su") && !TWFunc::Path_Exists("/system/xbin/su") && !TWFunc::Path_Exists("/system/bin/.ext/.su")) { + // Device doesn't have su installed + DataManager::SetValue("tw_busy", 1); + if (gui_startPage("installsu") != 0) { + LOGERR("Failed to start decrypt GUI page.\n"); + } + } else if (TWFunc::Check_su_Perms() > 0) { + // su perms are set incorrectly + DataManager::SetValue("tw_busy", 1); + if (gui_startPage("fixsu") != 0) { + LOGERR("Failed to start decrypt GUI page.\n"); + } + } + sync(); + PartitionManager.UnMount_By_Path("/system", false); + } + + // Reboot + TWFunc::Update_Intent_File(Reboot_Value); + TWFunc::Update_Log_File(); + gui_print("Rebooting...\n"); + string Reboot_Arg; + DataManager::GetValue("tw_reboot_arg", Reboot_Arg); + if (Reboot_Arg == "recovery") + TWFunc::tw_reboot(rb_recovery); + else if (Reboot_Arg == "poweroff") + TWFunc::tw_reboot(rb_poweroff); + else if (Reboot_Arg == "bootloader") + TWFunc::tw_reboot(rb_bootloader); + else if (Reboot_Arg == "download") + TWFunc::tw_reboot(rb_download); + else + TWFunc::tw_reboot(rb_system); + +#ifdef ANDROID_RB_RESTART + android_reboot(ANDROID_RB_RESTART, 0, 0); +#else + reboot(RB_AUTOBOOT); +#endif + return 0; +} diff --git a/twrpDigest.cpp b/twrpDigest.cpp index add498c6c..663d08566 100644 --- a/twrpDigest.cpp +++ b/twrpDigest.cpp @@ -36,7 +36,7 @@ extern "C" { #include #include #include -#include "common.h" +#include "twcommon.h" #include "data.hpp" #include "variables.h" #include "twrp-functions.hpp" @@ -61,6 +61,7 @@ int twrpDigest::computeMD5(void) { while ((len = fread(buf, 1, sizeof(buf), file)) > 0) { MD5Update(&md5c, buf, len); } + fclose(file); MD5Final(md5sum ,&md5c); return 0; } diff --git a/twrpTar.cpp b/twrpTar.cpp index 1ab1ab7d3..2dbfd1562 100644 --- a/twrpTar.cpp +++ b/twrpTar.cpp @@ -35,7 +35,7 @@ extern "C" { #include #include #include "twrpTar.hpp" -#include "common.h" +#include "twcommon.h" #include "data.hpp" #include "variables.h" #include "twrp-functions.hpp" @@ -54,7 +54,7 @@ int twrpTar::createTarGZFork() { int status; pid_t pid; if ((pid = fork()) == -1) { - LOGI("create tar failed to fork.\n"); + LOGINFO("create tar failed to fork.\n"); return -1; } if (pid == 0) { @@ -65,18 +65,18 @@ int twrpTar::createTarGZFork() { } else { if ((pid = wait(&status)) == -1) { - LOGI("Tar creation failed\n"); + LOGINFO("Tar creation failed\n"); return -1; } else { if (WIFSIGNALED(status) != 0) { - LOGI("Child process ended with signal: %d\n", WTERMSIG(status)); + LOGINFO("Child process ended with signal: %d\n", WTERMSIG(status)); return -1; } else if (WIFEXITED(status) != 0) - LOGI("Tar creation successful\n"); + LOGINFO("Tar creation successful\n"); else { - LOGI("Tar creation failed\n"); + LOGINFO("Tar creation failed\n"); return -1; } } @@ -88,7 +88,7 @@ int twrpTar::createTarFork() { int status; pid_t pid; if ((pid = fork()) == -1) { - LOGI("create tar failed to fork.\n"); + LOGINFO("create tar failed to fork.\n"); return -1; } if (pid == 0) { @@ -99,18 +99,18 @@ int twrpTar::createTarFork() { } else { if ((pid = wait(&status)) == -1) { - LOGI("Tar creation failed\n"); + LOGINFO("Tar creation failed\n"); return -1; } else { if (WIFSIGNALED(status) != 0) { - LOGI("Child process ended with signal: %d\n", WTERMSIG(status)); + LOGINFO("Child process ended with signal: %d\n", WTERMSIG(status)); return -1; } else if (WEXITSTATUS(status) == 0) - LOGI("Tar creation successful\n"); + LOGINFO("Tar creation successful\n"); else { - LOGI("Tar creation failed\n"); + LOGINFO("Tar creation failed\n"); return -1; } } @@ -122,7 +122,7 @@ int twrpTar::extractTarFork() { int status; pid_t pid; if ((pid = fork()) == -1) { - LOGI("extract tar failed to fork.\n"); + LOGINFO("extract tar failed to fork.\n"); return -1; } if (pid == 0) { @@ -133,18 +133,18 @@ int twrpTar::extractTarFork() { } else { if ((pid = wait(&status)) == -1) { - LOGI("Tar extraction failed\n"); + LOGINFO("Tar extraction failed\n"); return -1; } else { if (WIFSIGNALED(status) != 0) { - LOGI("Child process ended with signal: %d\n", WTERMSIG(status)); + LOGINFO("Child process ended with signal: %d\n", WTERMSIG(status)); return -1; } else if (WEXITSTATUS(status) == 0) - LOGI("Tar extraction successful\n"); + LOGINFO("Tar extraction successful\n"); else { - LOGI("Tar extraction failed\n"); + LOGINFO("Tar extraction failed\n"); return -1; } } @@ -156,7 +156,7 @@ int twrpTar::splitArchiveFork() { int status; pid_t pid; if ((pid = fork()) == -1) { - LOGI("create tar failed to fork.\n"); + LOGINFO("create tar failed to fork.\n"); return -1; } if (pid == 0) { @@ -167,18 +167,18 @@ int twrpTar::splitArchiveFork() { } else { if ((pid = wait(&status)) == -1) { - LOGI("Tar creation failed\n"); + LOGINFO("Tar creation failed\n"); return -1; } else { if (WIFSIGNALED(status) != 0) { - LOGI("Child process ended with signal: %d\n", WTERMSIG(status)); + LOGINFO("Child process ended with signal: %d\n", WTERMSIG(status)); return -1; } else if (WIFEXITED(status) != 0) - LOGI("Tar creation successful\n"); + LOGINFO("Tar creation successful\n"); else { - LOGI("Tar creation failed\n"); + LOGINFO("Tar creation failed\n"); return -1; } } @@ -195,12 +195,12 @@ int twrpTar::Generate_Multiple_Archives(string Path) { if (has_data_media == 1 && Path.size() >= 11 && strncmp(Path.c_str(), "/data/media", 11) == 0) return 0; // Skip /data/media - LOGI("Path: '%s', archive filename: '%s'\n", Path.c_str(), tarfn.c_str()); + LOGINFO("Path: '%s', archive filename: '%s'\n", Path.c_str(), tarfn.c_str()); d = opendir(Path.c_str()); if (d == NULL) { - LOGE("error opening '%s' -- error: %s\n", Path.c_str(), strerror(errno)); + LOGERR("error opening '%s' -- error: %s\n", Path.c_str(), strerror(errno)); closedir(d); return -1; } @@ -216,12 +216,12 @@ int twrpTar::Generate_Multiple_Archives(string Path) { { unsigned long long folder_size = TWFunc::Get_Folder_Size(FileName, false); if (Archive_Current_Size + folder_size > MAX_ARCHIVE_SIZE) { - LOGI("Calling Generate_Multiple_Archives\n"); + LOGINFO("Calling Generate_Multiple_Archives\n"); if (Generate_Multiple_Archives(FileName) < 0) return -1; } else { //FileName += "/"; - LOGI("Adding folder '%s'\n", FileName.c_str()); + LOGINFO("Adding folder '%s'\n", FileName.c_str()); tardir = FileName; if (tarDirs(true) < 0) return -1; @@ -233,34 +233,34 @@ int twrpTar::Generate_Multiple_Archives(string Path) { stat(FileName.c_str(), &st); if (Archive_Current_Size != 0 && Archive_Current_Size + st.st_size > MAX_ARCHIVE_SIZE) { - LOGI("Closing tar '%s', ", tarfn.c_str()); + LOGINFO("Closing tar '%s', ", tarfn.c_str()); closeTar(false); reinit_libtar_buffer(); if (TWFunc::Get_File_Size(tarfn) == 0) { - LOGE("Backup file size for '%s' is 0 bytes.\n", tarfn.c_str()); + LOGERR("Backup file size for '%s' is 0 bytes.\n", tarfn.c_str()); return -1; } Archive_File_Count++; if (Archive_File_Count > 999) { - LOGE("Archive count is too large!\n"); + LOGERR("Archive count is too large!\n"); return -1; } string temp = basefn + "%03i"; sprintf(actual_filename, temp.c_str(), Archive_File_Count); tarfn = actual_filename; Archive_Current_Size = 0; - LOGI("Creating tar '%s'\n", tarfn.c_str()); - ui_print("Creating archive %i...\n", Archive_File_Count + 1); + LOGINFO("Creating tar '%s'\n", tarfn.c_str()); + gui_print("Creating archive %i...\n", Archive_File_Count + 1); if (createTar() != 0) return -1; } - LOGI("Adding file: '%s'... ", FileName.c_str()); + LOGINFO("Adding file: '%s'... ", FileName.c_str()); if (addFile(FileName, true) < 0) return -1; Archive_Current_Size += st.st_size; - LOGI("added successfully, archive size: %llu\n", Archive_Current_Size); + LOGINFO("added successfully, archive size: %llu\n", Archive_Current_Size); if (st.st_size > 2147483648LL) - LOGE("There is a file that is larger than 2GB in the file system\n'%s'\nThis file may not restore properly\n", FileName.c_str()); + LOGERR("There is a file that is larger than 2GB in the file system\n'%s'\nThis file may not restore properly\n", FileName.c_str()); } } closedir(d); @@ -280,15 +280,15 @@ int twrpTar::Split_Archive() init_libtar_buffer(0); createTar(); DataManager::GetValue(TW_HAS_DATA_MEDIA, has_data_media); - ui_print("Creating archive 1...\n"); + gui_print("Creating archive 1...\n"); if (Generate_Multiple_Archives(tardir) < 0) { - LOGE("Error generating multiple archives\n"); + LOGERR("Error generating multiple archives\n"); free_libtar_buffer(); return -1; } closeTar(false); free_libtar_buffer(); - LOGI("Done, created %i archives.\n", (Archive_File_Count++)); + LOGINFO("Done, created %i archives.\n", (Archive_File_Count++)); return (Archive_File_Count); } @@ -298,11 +298,11 @@ int twrpTar::extractTar() { if (openTar(gzip) == -1) return -1; if (tar_extract_all(t, charRootDir) != 0) { - LOGE("Unable to extract tar archive '%s'\n", tarfn.c_str()); + LOGERR("Unable to extract tar archive '%s'\n", tarfn.c_str()); return -1; } if (tar_close(t) != 0) { - LOGE("Unable to close tar file\n"); + LOGERR("Unable to close tar file\n"); return -1; } return 0; @@ -334,12 +334,12 @@ int twrpTar::extract() { if (Archive_Current_Type == 1) { //if you return the extractTGZ function directly, stack crashes happen - LOGI("Extracting gzipped tar\n"); + LOGINFO("Extracting gzipped tar\n"); int ret = extractTGZ(); return ret; } else { - LOGI("Extracting uncompressed tar\n"); + LOGINFO("Extracting uncompressed tar\n"); return extractTar(); } } @@ -361,12 +361,12 @@ int twrpTar::tarDirs(bool include_root) { if (strcmp(de->d_name, ".") != 0) { subfolder += de->d_name; } else { - LOGI("adding '%s'\n", subfolder.c_str()); + LOGINFO("adding '%s'\n", subfolder.c_str()); if (addFile(subfolder, include_root) != 0) return -1; continue; } - LOGI("adding '%s'\n", subfolder.c_str()); + LOGINFO("adding '%s'\n", subfolder.c_str()); strcpy(buf, subfolder.c_str()); if (de->d_type == DT_DIR) { char* charTarPath; @@ -377,7 +377,7 @@ int twrpTar::tarDirs(bool include_root) { charTarPath = (char*) temp.c_str(); } if (tar_append_tree(t, buf, charTarPath) != 0) { - LOGE("Error appending '%s' to tar archive '%s'\n", buf, tarfn.c_str()); + LOGERR("Error appending '%s' to tar archive '%s'\n", buf, tarfn.c_str()); return -1; } } else if (tardir != "/" && (de->d_type == DT_REG || de->d_type == DT_LNK)) { @@ -472,20 +472,20 @@ int twrpTar::openTar(bool gzip) { char* charTarFile = (char*) tarfn.c_str(); if (gzip) { - LOGI("Opening as a gzip\n"); + LOGINFO("Opening as a gzip\n"); string cmd = "pigz -d -c '" + tarfn + "'"; FILE* pipe = popen(cmd.c_str(), "r"); int fd = fileno(pipe); if (!pipe) return -1; if(tar_fdopen(&t, fd, charRootDir, NULL, O_RDONLY | O_LARGEFILE, 0644, TAR_GNU) != 0) { - LOGI("tar_fdopen returned error\n"); + LOGINFO("tar_fdopen returned error\n"); __pclose(pipe); return -1; } } else { if (tar_open(&t, charTarFile, NULL, O_RDONLY | O_LARGEFILE, 0644, TAR_GNU) != 0) { - LOGE("Unable to open tar archive '%s'\n", charTarFile); + LOGERR("Unable to open tar archive '%s'\n", charTarFile); return -1; } } @@ -532,16 +532,16 @@ int twrpTar::closeTar(bool gzip) { flush_libtar_buffer(t->fd); if (tar_append_eof(t) != 0) { - LOGE("tar_append_eof(): %s\n", strerror(errno)); + LOGERR("tar_append_eof(): %s\n", strerror(errno)); tar_close(t); return -1; } if (tar_close(t) != 0) { - LOGE("Unable to close tar archive: '%s'\n", tarfn.c_str()); + LOGERR("Unable to close tar archive: '%s'\n", tarfn.c_str()); return -1; } if (use_compression || gzip) { - LOGI("Closing popen and fd\n"); + LOGINFO("Closing popen and fd\n"); pclose(p); close(fd); } @@ -585,7 +585,7 @@ int twrpTar::extractTGZ() { return -1; int ret = tar_extract_all(t, splatCharRootDir); if (tar_close(t) != 0) { - LOGE("Unable to close tar file\n"); + LOGERR("Unable to close tar file\n"); return -1; } return 0; @@ -603,7 +603,7 @@ int twrpTar::entryExists(string entry) { ret = tar_find(t, searchstr); if (tar_close(t) != 0) - LOGI("Unable to close tar file after searching for entry '%s'.\n", entry.c_str()); + LOGINFO("Unable to close tar file after searching for entry '%s'.\n", entry.c_str()); return ret; } diff --git a/variables.h b/variables.h index 3808212d4..465470333 100644 --- a/variables.h +++ b/variables.h @@ -178,5 +178,6 @@ // For OpenRecoveryScript #define SCRIPT_FILE_CACHE "/cache/recovery/openrecoveryscript" #define SCRIPT_FILE_TMP "/tmp/openrecoveryscript" +#define TMP_LOG_FILE "/tmp/recovery.log" #endif // _VARIABLES_HEADER_ diff --git a/verifier.cpp b/verifier.cpp index 1c5a41d1b..82739f339 100644 --- a/verifier.cpp +++ b/verifier.cpp @@ -25,7 +25,85 @@ #include #include -extern RecoveryUI* ui; +//extern RecoveryUI* ui; + +#define PUBLIC_KEYS_FILE "/res/keys" + +// Reads a file containing one or more public keys as produced by +// DumpPublicKey: this is an RSAPublicKey struct as it would appear +// as a C source literal, eg: +// +// "{64,0xc926ad21,{1795090719,...,-695002876},{-857949815,...,1175080310}}" +// +// (Note that the braces and commas in this example are actual +// characters the parser expects to find in the file; the ellipses +// indicate more numbers omitted from this example.) +// +// The file may contain multiple keys in this format, separated by +// commas. The last key must not be followed by a comma. +// +// Returns NULL if the file failed to parse, or if it contain zero keys. +static RSAPublicKey* +load_keys(const char* filename, int* numKeys) { + RSAPublicKey* out = NULL; + *numKeys = 0; + + FILE* f = fopen(filename, "r"); + if (f == NULL) { + printf("opening %s: %s\n", filename, strerror(errno)); + goto exit; + } + + { + int i; + bool done = false; + while (!done) { + ++*numKeys; + out = (RSAPublicKey*)realloc(out, *numKeys * sizeof(RSAPublicKey)); + RSAPublicKey* key = out + (*numKeys - 1); + if (fscanf(f, " { %i , 0x%x , { %u", + &(key->len), &(key->n0inv), &(key->n[0])) != 3) { + goto exit; + } + if (key->len != RSANUMWORDS) { + printf("key length (%d) does not match expected size\n", key->len); + goto exit; + } + for (i = 1; i < key->len; ++i) { + if (fscanf(f, " , %u", &(key->n[i])) != 1) goto exit; + } + if (fscanf(f, " } , { %u", &(key->rr[0])) != 1) goto exit; + for (i = 1; i < key->len; ++i) { + if (fscanf(f, " , %u", &(key->rr[i])) != 1) goto exit; + } + fscanf(f, " } } "); + + // if the line ends in a comma, this file has more keys. + switch (fgetc(f)) { + case ',': + // more keys to come. + break; + + case EOF: + done = true; + break; + + default: + printf("unexpected character between keys\n"); + goto exit; + } + } + } + + fclose(f); + return out; + +exit: + if (f) fclose(f); + free(out); + *numKeys = 0; + return NULL; +} // Look for an RSA signature embedded in the .ZIP file comment given // the path to the zip. Verify it matches one of the given public @@ -33,9 +111,25 @@ extern RecoveryUI* ui; // // Return VERIFY_SUCCESS, VERIFY_FAILURE (if any error is encountered // or no key matches the signature). +int verify_file(const char* path) { + //ui->SetProgress(0.0); -int verify_file(const char* path, const RSAPublicKey *pKeys, unsigned int numKeys) { - ui->SetProgress(0.0); + int numKeys; + RSAPublicKey* loadedKeys = load_keys(PUBLIC_KEYS_FILE, &numKeys); + if (loadedKeys == NULL) { + LOGE("Failed to load keys\n"); + return VERIFY_FAILURE; + } + LOGI("%d key(s) loaded from %s\n\n RSA Key:\n\n", numKeys, PUBLIC_KEYS_FILE); + int rsa_size = sizeof(RSAPublicKey); + unsigned char* ptr = (unsigned char*) loadedKeys; + unsigned int valuedees; + for (int dees2 = 0; dees2 < rsa_size; dees2++) { + valuedees = *ptr; + printf("%02x ", valuedees); + ptr++; + } + printf("\n\n"); FILE* f = fopen(path, "rb"); if (f == NULL) { @@ -163,7 +257,7 @@ int verify_file(const char* path, const RSAPublicKey *pKeys, unsigned int numKey so_far += size; double f = so_far / (double)signed_len; if (f > frac + 0.02 || size == so_far) { - ui->SetProgress(f); + //ui->SetProgress(f); frac = f; } } @@ -174,12 +268,14 @@ int verify_file(const char* path, const RSAPublicKey *pKeys, unsigned int numKey for (i = 0; i < numKeys; ++i) { // The 6 bytes is the "(signature_start) $ff $ff (comment_size)" that // the signing tool appends after the signature itself. - if (RSA_verify(pKeys+i, eocd + eocd_size - 6 - RSANUMBYTES, - RSANUMBYTES, sha1)) { + int dees = RSA_verify(loadedKeys+i, eocd + eocd_size - 6 - RSANUMBYTES, + RSANUMBYTES, sha1); + if (dees) { LOGI("whole-file signature verified against key %d\n", i); free(eocd); return VERIFY_SUCCESS; } + LOGI("i: %i, eocd_size: %i, RSANUMBYTES: %i, returned %i\n", i, eocd_size, RSANUMBYTES, dees); } free(eocd); LOGE("failed to verify whole-file signature\n"); diff --git a/verifier.h b/verifier.h index 1bdfca6dd..c5a2391c7 100644 --- a/verifier.h +++ b/verifier.h @@ -19,10 +19,16 @@ #include "mincrypt/rsa.h" +#define ASSUMED_UPDATE_BINARY_NAME "META-INF/com/google/android/update-binary" + +enum { INSTALL_SUCCESS, INSTALL_ERROR, INSTALL_CORRUPT }; + +static const float VERIFICATION_PROGRESS_FRACTION = 0.25; + /* Look in the file for a signature footer, and verify that it * matches one of the given keys. Return one of the constants below. */ -int verify_file(const char* path, const RSAPublicKey *pKeys, unsigned int numKeys); +int verify_file(const char* path); #define VERIFY_SUCCESS 0 #define VERIFY_FAILURE 1 -- cgit v1.2.3