diff options
-rwxr-xr-x | gui/devices/1024x600/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/1024x768/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/1280x800/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/1920x1200/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/2560x1600/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/320x480/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/480x800/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/480x854/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/540x960/res/ui.xml | 12 | ||||
-rw-r--r-- | gui/devices/720x1280/res/ui.xml | 12 | ||||
-rwxr-xr-x | gui/devices/800x1280/res/ui.xml | 12 | ||||
-rwxr-xr-x | gui/devices/800x480/res/ui.xml | 12 | ||||
-rw-r--r-- | minuitwrp/graphics.c | 18 | ||||
-rw-r--r-- | partition.cpp | 97 | ||||
-rw-r--r-- | partitionmanager.cpp | 124 | ||||
-rw-r--r-- | partitions.hpp | 6 |
16 files changed, 281 insertions, 108 deletions
diff --git a/gui/devices/1024x600/res/ui.xml b/gui/devices/1024x600/res/ui.xml index 1a2503627..4bed8502b 100755 --- a/gui/devices/1024x600/res/ui.xml +++ b/gui/devices/1024x600/res/ui.xml @@ -2061,6 +2061,18 @@ </actions> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/1024x768/res/ui.xml b/gui/devices/1024x768/res/ui.xml index b6da352d2..1cdd77ab7 100644 --- a/gui/devices/1024x768/res/ui.xml +++ b/gui/devices/1024x768/res/ui.xml @@ -2061,6 +2061,18 @@ </actions> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/1280x800/res/ui.xml b/gui/devices/1280x800/res/ui.xml index 9904b5acc..11fa7dc44 100644 --- a/gui/devices/1280x800/res/ui.xml +++ b/gui/devices/1280x800/res/ui.xml @@ -2061,6 +2061,18 @@ </actions> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/1920x1200/res/ui.xml b/gui/devices/1920x1200/res/ui.xml index c0dd0b615..c829e9b73 100644 --- a/gui/devices/1920x1200/res/ui.xml +++ b/gui/devices/1920x1200/res/ui.xml @@ -2061,6 +2061,18 @@ </actions> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/2560x1600/res/ui.xml b/gui/devices/2560x1600/res/ui.xml index debe1b2c0..ac00deeb6 100644 --- a/gui/devices/2560x1600/res/ui.xml +++ b/gui/devices/2560x1600/res/ui.xml @@ -2061,6 +2061,18 @@ </actions> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/320x480/res/ui.xml b/gui/devices/320x480/res/ui.xml index 64764d842..778d49f55 100644 --- a/gui/devices/320x480/res/ui.xml +++ b/gui/devices/320x480/res/ui.xml @@ -2117,6 +2117,18 @@ <action function="page">usb_mount</action> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/480x800/res/ui.xml b/gui/devices/480x800/res/ui.xml index 798e9b949..0c2c03f99 100644 --- a/gui/devices/480x800/res/ui.xml +++ b/gui/devices/480x800/res/ui.xml @@ -2116,6 +2116,18 @@ <action function="page">usb_mount</action> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/480x854/res/ui.xml b/gui/devices/480x854/res/ui.xml index 62fb909db..b1cf00c6d 100644 --- a/gui/devices/480x854/res/ui.xml +++ b/gui/devices/480x854/res/ui.xml @@ -2115,6 +2115,18 @@ <action function="page">usb_mount</action> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/540x960/res/ui.xml b/gui/devices/540x960/res/ui.xml index 5e90ae0ba..481beca5f 100644 --- a/gui/devices/540x960/res/ui.xml +++ b/gui/devices/540x960/res/ui.xml @@ -2116,6 +2116,18 @@ <action function="page">usb_mount</action> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/720x1280/res/ui.xml b/gui/devices/720x1280/res/ui.xml index 9be4086cf..4e6ba9f82 100644 --- a/gui/devices/720x1280/res/ui.xml +++ b/gui/devices/720x1280/res/ui.xml @@ -2121,6 +2121,18 @@ <action function="page">usb_mount</action> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/800x1280/res/ui.xml b/gui/devices/800x1280/res/ui.xml index c435cf94e..dd86e23ca 100755 --- a/gui/devices/800x1280/res/ui.xml +++ b/gui/devices/800x1280/res/ui.xml @@ -2117,6 +2117,18 @@ <action function="page">usb_mount</action> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/gui/devices/800x480/res/ui.xml b/gui/devices/800x480/res/ui.xml index 3241e9945..6096c57af 100755 --- a/gui/devices/800x480/res/ui.xml +++ b/gui/devices/800x480/res/ui.xml @@ -2061,6 +2061,18 @@ </actions> </object> + <object type="button"> + <conditions> + <condition var1="tw_is_encrypted" var2="1" /> + <condition var1="tw_is_decrypted" var2="0" /> + </conditions> + <placement x="%col2_x%" y="row3_y" /> + <font resource="font" color="%button_text_color%" /> + <text>Decrypt Data</text> + <image resource="main_button" /> + <action function="page">decrypt</action> + </object> + <object type="action"> <touch key="home" /> <action function="page">main</action> diff --git a/minuitwrp/graphics.c b/minuitwrp/graphics.c index b30a92ef0..dc79db881 100644 --- a/minuitwrp/graphics.c +++ b/minuitwrp/graphics.c @@ -51,6 +51,8 @@ #define PIXEL_SIZE 2 #endif +#define NUM_BUFFERS 2 + // #define PRINT_SCREENINFO 1 // Enables printing of screen info to log typedef struct { @@ -63,9 +65,10 @@ typedef struct { static GRFont *gr_font = 0; static GGLContext *gr_context = 0; static GGLSurface gr_font_texture; -static GGLSurface gr_framebuffer[2]; +static GGLSurface gr_framebuffer[NUM_BUFFERS]; static GGLSurface gr_mem_surface; static unsigned gr_active_fb = 0; +static unsigned double_buffering = 0; static int gr_fb_fd = -1; static int gr_vt_fd = -1; @@ -199,6 +202,12 @@ static int get_framebuffer(GGLSurface *fb) fb++; + /* check if we can use double buffering */ + if (vi.yres * fi.line_length * 2 > fi.smem_len) + return fd; + + double_buffering = 1; + fb->version = sizeof(*fb); fb->width = vi.xres; fb->height = vi.yres; @@ -230,8 +239,8 @@ static void get_memory_surface(GGLSurface* ms) { static void set_active_framebuffer(unsigned n) { - if (n > 1) return; - vi.yres_virtual = vi.yres * 2; + if (n > 1 || !double_buffering) return; + vi.yres_virtual = vi.yres * NUM_BUFFERS; vi.yoffset = n * vi.yres; // vi.bits_per_pixel = PIXEL_SIZE * 8; if (ioctl(gr_fb_fd, FBIOPUT_VSCREENINFO, &vi) < 0) { @@ -244,7 +253,8 @@ void gr_flip(void) GGLContext *gl = gr_context; /* swap front and back buffers */ - gr_active_fb = (gr_active_fb + 1) & 1; + if (double_buffering) + gr_active_fb = (gr_active_fb + 1) & 1; #ifdef BOARD_HAS_FLIPPED_SCREEN /* flip buffer 180 degrees for devices with physicaly inverted screens */ diff --git a/partition.cpp b/partition.cpp index 8aa7f0ae9..32376c1bc 100644 --- a/partition.cpp +++ b/partition.cpp @@ -82,6 +82,7 @@ TWPartition::TWPartition(void) { Current_File_System = ""; Fstab_File_System = ""; Format_Block_Size = 0; + Ignore_Blkid = false; } TWPartition::~TWPartition(void) { @@ -152,6 +153,7 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) { // Custom flags, save for later so that new values aren't overwritten by defaults ptr += 6; Flags = ptr; + Process_Flags(Flags, Display_Error); } else if (strlen(ptr) == 4 && (strncmp(ptr, "NULL", 4) == 0 || strncmp(ptr, "null", 4) == 0 || strncmp(ptr, "null", 4) == 0)) { // Do nothing } else { @@ -333,6 +335,8 @@ bool TWPartition::Process_Flags(string Flags, bool Display_Error) { ptr += 13; Is_SubPartition = true; SubPartition_Of = ptr; + } else if (strcmp(ptr, "ignoreblkid") == 0) { + Ignore_Blkid = true; } else if (strlen(ptr) > 8 && strncmp(ptr, "symlink=", 8) == 0) { ptr += 8; Symlink_Path = ptr; @@ -698,7 +702,7 @@ bool TWPartition::UnMount(bool Display_Error) { } } -bool TWPartition::Wipe() { +bool TWPartition::Wipe(string New_File_System) { if (!Can_Be_Wiped) { LOGE("Partition '%s' cannot be wiped.\n", Mount_Point.c_str()); return false; @@ -715,22 +719,26 @@ bool TWPartition::Wipe() { if (check) return Wipe_RMRF(); - if (Current_File_System == "ext4") + if (New_File_System == "ext4") return Wipe_EXT4(); - if (Current_File_System == "ext2" || Current_File_System == "ext3") - return Wipe_EXT23(); + if (New_File_System == "ext2" || New_File_System == "ext3") + return Wipe_EXT23(New_File_System); - if (Current_File_System == "vfat") + if (New_File_System == "vfat") return Wipe_FAT(); - if (Current_File_System == "yaffs2") + if (New_File_System == "yaffs2") return Wipe_MTD(); - LOGE("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), Current_File_System.c_str()); + LOGE("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), New_File_System.c_str()); return false; } +bool TWPartition::Wipe() { + return Wipe(Current_File_System); +} + bool TWPartition::Wipe_AndSec(void) { if (!Has_Android_Secure) return false; @@ -789,12 +797,36 @@ bool TWPartition::Check_MD5(string restore_folder) { } bool TWPartition::Restore(string restore_folder) { - if (Backup_Method == FILES) - return Restore_Tar(restore_folder); - else if (Backup_Method == DD) - return Restore_DD(restore_folder); - else if (Backup_Method == FLASH_UTILS) - return Restore_Flash_Image(restore_folder); + size_t first_period, second_period; + string Restore_File_System; + + TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, "Restoring"); + LOGI("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"); + 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"); + return false; + } + Restore_File_System.resize(second_period); + LOGI("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); + else if (Is_Image(Restore_File_System)) { + if (Restore_File_System == "emmc") + return Restore_DD(restore_folder); + else if (Restore_File_System == "mtd" || Restore_File_System == "bml") + return Restore_Flash_Image(restore_folder); + } + LOGE("Unknown restore method for '%s'\n", Mount_Point.c_str()); return false; } @@ -853,8 +885,8 @@ void TWPartition::Check_FS_Type() { char* arg; char* ptr; - if (Fstab_File_System == "yaffs2" || Fstab_File_System == "mtd" || Fstab_File_System == "bml") - return; // Running blkid on some mtd devices causes a massive crash + if (Fstab_File_System == "yaffs2" || Fstab_File_System == "mtd" || Fstab_File_System == "bml" || Ignore_Blkid) + return; // Running blkid on some mtd devices causes a massive crash or needs to be skipped Find_Actual_Block_Device(); if (!Is_Present) @@ -920,7 +952,7 @@ void TWPartition::Check_FS_Type() { return; } -bool TWPartition::Wipe_EXT23() { +bool TWPartition::Wipe_EXT23(string File_System) { if (!UnMount(true)) return false; @@ -929,7 +961,7 @@ bool TWPartition::Wipe_EXT23() { ui_print("Formatting %s using mke2fs...\n", Display_Name.c_str()); Find_Actual_Block_Device(); - sprintf(command, "mke2fs -t %s -m 0 %s", Current_File_System.c_str(), Actual_Block_Device.c_str()); + sprintf(command, "mke2fs -t %s -m 0 %s", File_System.c_str(), Actual_Block_Device.c_str()); LOGI("mke2fs command: %s\n", command); if (system(command) == 0) { Recreate_AndSec_Folder(); @@ -973,7 +1005,7 @@ bool TWPartition::Wipe_EXT4() { return false; } } else - return Wipe_EXT23(); + return Wipe_EXT23("ext4"); return false; } @@ -1198,42 +1230,26 @@ bool TWPartition::Backup_Dump_Image(string backup_folder) { return true; } -bool TWPartition::Restore_Tar(string restore_folder) { - size_t first_period, second_period; - string Restore_File_System, Full_FileName, Command; +bool TWPartition::Restore_Tar(string restore_folder, string Restore_File_System) { + string Full_FileName, Command; int index = 0; char split_index[5]; - TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, "Restoring"); - LOGI("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"); - 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"); - return false; - } - Restore_File_System.resize(second_period); - LOGI("Restore file system is: '%s'.\n", Restore_File_System.c_str()); Current_File_System = Restore_File_System; if (Has_Android_Secure) { ui_print("Wiping android secure...\n"); if (!Wipe_AndSec()) return false; - } else if (!Wipe()) { + } else { ui_print("Wiping %s...\n", Display_Name.c_str()); - return false; + if (!Wipe(Restore_File_System)) + return false; } if (!Mount(true)) return false; + TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, "Restoring"); ui_print("Restoring %s...\n", Display_Name.c_str()); Full_FileName = restore_folder + "/" + Backup_FileName; if (!TWFunc::Path_Exists(Full_FileName)) { @@ -1277,7 +1293,6 @@ bool TWPartition::Restore_DD(string restore_folder) { bool TWPartition::Restore_Flash_Image(string restore_folder) { string Full_FileName, Command; - TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, "Restoring"); ui_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 diff --git a/partitionmanager.cpp b/partitionmanager.cpp index 57e110867..536e86780 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -129,68 +129,70 @@ void TWPartitionManager::Output_Partition_Logging(void) { void TWPartitionManager::Output_Partition(TWPartition* Part) { unsigned long long mb = 1048576; + printf("%s | %s | Size: %iMB", Part->Mount_Point.c_str(), Part->Actual_Block_Device.c_str(), (int)(Part->Size / mb)); if (Part->Can_Be_Mounted) { - printf("%s | %s | Size: %iMB Used: %iMB Free: %iMB Backup Size: %iMB\n Flags: ", Part->Mount_Point.c_str(), Part->Actual_Block_Device.c_str(), (int)(Part->Size / mb), (int)(Part->Used / mb), (int)(Part->Free / mb), (int)(Part->Backup_Size / mb)); - if (Part->Can_Be_Wiped) - printf("Can_Be_Wiped "); - if (Part->Wipe_During_Factory_Reset) - printf("Wipe_During_Factory_Reset "); - if (Part->Wipe_Available_in_GUI) - printf("Wipe_Available_in_GUI "); - if (Part->Is_SubPartition) - printf("Is_SubPartition "); - if (Part->Has_SubPartition) - printf("Has_SubPartition "); - if (Part->Removable) - printf("Removable "); - if (Part->Is_Present) - printf("IsPresent "); - if (Part->Can_Be_Encrypted) - printf("Can_Be_Encrypted "); - if (Part->Is_Encrypted) - printf("Is_Encrypted "); - if (Part->Is_Decrypted) - printf("Is_Decrypted "); - if (Part->Has_Data_Media) - printf("Has_Data_Media "); - if (Part->Has_Android_Secure) - printf("Has_Android_Secure "); - if (Part->Is_Storage) - printf("Is_Storage "); - printf("\n"); - if (!Part->SubPartition_Of.empty()) - printf(" SubPartition_Of: %s\n", Part->SubPartition_Of.c_str()); - if (!Part->Symlink_Path.empty()) - printf(" Symlink_Path: %s\n", Part->Symlink_Path.c_str()); - if (!Part->Symlink_Mount_Point.empty()) - printf(" Symlink_Mount_Point: %s\n", Part->Symlink_Mount_Point.c_str()); - if (!Part->Primary_Block_Device.empty()) - printf(" Primary_Block_Device: %s\n", Part->Primary_Block_Device.c_str()); - if (!Part->Alternate_Block_Device.empty()) - printf(" Alternate_Block_Device: %s\n", Part->Alternate_Block_Device.c_str()); - if (!Part->Decrypted_Block_Device.empty()) - printf(" Decrypted_Block_Device: %s\n", Part->Decrypted_Block_Device.c_str()); - if (Part->Length != 0) - printf(" Length: %i\n", Part->Length); - if (!Part->Display_Name.empty()) - printf(" Display_Name: %s\n", Part->Display_Name.c_str()); - if (!Part->Backup_Path.empty()) - printf(" Backup_Path: %s\n", Part->Backup_Path.c_str()); - if (!Part->Backup_Name.empty()) - printf(" Backup_Name: %s\n", Part->Backup_Name.c_str()); - if (!Part->Backup_FileName.empty()) - printf(" Backup_FileName: %s\n", Part->Backup_FileName.c_str()); - if (!Part->Storage_Path.empty()) - printf(" Storage_Path: %s\n", Part->Storage_Path.c_str()); - if (!Part->Current_File_System.empty()) - printf(" Current_File_System: %s\n", Part->Current_File_System.c_str()); - if (!Part->Fstab_File_System.empty()) - printf(" Fstab_File_System: %s\n", Part->Fstab_File_System.c_str()); - if (Part->Format_Block_Size != 0) - printf(" Format_Block_Size: %i\n", Part->Format_Block_Size); - } else { - printf("%s | %s | Size: %iMB\n", Part->Mount_Point.c_str(), Part->Actual_Block_Device.c_str(), (int)(Part->Size / mb)); - } + printf(" Used: %iMB Free: %iMB Backup Size: %iMB", (int)(Part->Used / mb), (int)(Part->Free / mb), (int)(Part->Backup_Size / mb)); + } + printf("\n Flags: "); + if (Part->Can_Be_Wiped) + printf("Can_Be_Wiped "); + if (Part->Wipe_During_Factory_Reset) + printf("Wipe_During_Factory_Reset "); + if (Part->Wipe_Available_in_GUI) + printf("Wipe_Available_in_GUI "); + if (Part->Is_SubPartition) + printf("Is_SubPartition "); + if (Part->Has_SubPartition) + printf("Has_SubPartition "); + if (Part->Removable) + printf("Removable "); + if (Part->Is_Present) + printf("IsPresent "); + if (Part->Can_Be_Encrypted) + printf("Can_Be_Encrypted "); + if (Part->Is_Encrypted) + printf("Is_Encrypted "); + if (Part->Is_Decrypted) + printf("Is_Decrypted "); + if (Part->Has_Data_Media) + printf("Has_Data_Media "); + if (Part->Has_Android_Secure) + printf("Has_Android_Secure "); + if (Part->Is_Storage) + printf("Is_Storage "); + if (Part->Ignore_Blkid) + printf("Ignore_Blkid "); + printf("\n"); + if (!Part->SubPartition_Of.empty()) + printf(" SubPartition_Of: %s\n", Part->SubPartition_Of.c_str()); + if (!Part->Symlink_Path.empty()) + printf(" Symlink_Path: %s\n", Part->Symlink_Path.c_str()); + if (!Part->Symlink_Mount_Point.empty()) + printf(" Symlink_Mount_Point: %s\n", Part->Symlink_Mount_Point.c_str()); + if (!Part->Primary_Block_Device.empty()) + printf(" Primary_Block_Device: %s\n", Part->Primary_Block_Device.c_str()); + if (!Part->Alternate_Block_Device.empty()) + printf(" Alternate_Block_Device: %s\n", Part->Alternate_Block_Device.c_str()); + if (!Part->Decrypted_Block_Device.empty()) + printf(" Decrypted_Block_Device: %s\n", Part->Decrypted_Block_Device.c_str()); + if (Part->Length != 0) + printf(" Length: %i\n", Part->Length); + if (!Part->Display_Name.empty()) + printf(" Display_Name: %s\n", Part->Display_Name.c_str()); + if (!Part->Backup_Path.empty()) + printf(" Backup_Path: %s\n", Part->Backup_Path.c_str()); + if (!Part->Backup_Name.empty()) + printf(" Backup_Name: %s\n", Part->Backup_Name.c_str()); + if (!Part->Backup_FileName.empty()) + printf(" Backup_FileName: %s\n", Part->Backup_FileName.c_str()); + if (!Part->Storage_Path.empty()) + printf(" Storage_Path: %s\n", Part->Storage_Path.c_str()); + if (!Part->Current_File_System.empty()) + printf(" Current_File_System: %s\n", Part->Current_File_System.c_str()); + if (!Part->Fstab_File_System.empty()) + printf(" Fstab_File_System: %s\n", Part->Fstab_File_System.c_str()); + if (Part->Format_Block_Size != 0) + printf(" Format_Block_Size: %i\n", Part->Format_Block_Size); if (!Part->MTD_Name.empty()) printf(" MTD_Name: %s\n", Part->MTD_Name.c_str()); string back_meth = Part->Backup_Method_By_Name(); diff --git a/partitions.hpp b/partitions.hpp index 83e924323..2c3ad7180 100644 --- a/partitions.hpp +++ b/partitions.hpp @@ -49,6 +49,7 @@ public: virtual bool Is_Mounted(); // Checks mount to see if the partition is currently mounted virtual bool Mount(bool Display_Error); // Mounts the partition if it is not mounted virtual bool UnMount(bool Display_Error); // Unmounts the partition if it is mounted + virtual bool Wipe(string New_File_System); // Wipes the partition virtual bool Wipe(); // Wipes the partition virtual bool Wipe_AndSec(); // Wipes android secure virtual bool Backup(string backup_folder); // Backs up the partition to the folder specified @@ -105,6 +106,7 @@ protected: string Storage_Path; // Indicates the path to the storage -- root indicates mount point, media/ indicates e.g. /data/media string Fstab_File_System; // File system from the recovery.fstab int Format_Block_Size; // Block size for formatting + bool Ignore_Blkid; // Ignore blkid results due to superblocks lying to us on certain devices / partitions private: bool Process_Flags(string Flags, bool Display_Error); // Process custom fstab flags @@ -116,7 +118,7 @@ private: void Find_Real_Block_Device(string& Block_Device, bool Display_Error); // Checks the block device given and follows symlinks until it gets to the real block device bool Find_Partition_Size(); // Finds the partition size from /proc/partitions unsigned long long Get_Size_Via_du(string Path, bool Display_Error); // Uses du to get sizes - bool Wipe_EXT23(); // Formats as ext3 or ext2 + bool Wipe_EXT23(string File_System); // Formats as ext3 or ext2 bool Wipe_EXT4(); // Formats using ext4, uses make_ext4fs when present bool Wipe_FAT(); // Formats as FAT except that mkdosfs from busybox usually fails so oftentimes this is actually a rm -rf wipe bool Wipe_MTD(); // Formats as yaffs2 for MTD memory types @@ -125,7 +127,7 @@ private: bool Backup_Tar(string backup_folder); // Backs up using tar for file systems bool Backup_DD(string backup_folder); // Backs up using dd for emmc memory types bool Backup_Dump_Image(string backup_folder); // Backs up using dump_image for MTD memory types - bool Restore_Tar(string restore_folder); // Restore using tar for file systems + bool Restore_Tar(string restore_folder, string Restore_File_System); // Restore using tar for file systems bool Restore_DD(string restore_folder); // Restore using dd for emmc memory types bool Restore_Flash_Image(string restore_folder); // Restore using flash_image for MTD memory types bool Get_Size_Via_statfs(bool Display_Error); // Get Partition size, used, and free space using statfs |