| Dees Troy | 3be70a8 | 2013-10-22 14:25:12 +0000 | [diff] [blame] | 1 | /* | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 2 | 	Copyright 2014 TeamWin | 
| Dees Troy | 3be70a8 | 2013-10-22 14:25:12 +0000 | [diff] [blame] | 3 | 	This file is part of TWRP/TeamWin Recovery Project. | 
 | 4 |  | 
 | 5 | 	TWRP is free software: you can redistribute it and/or modify | 
 | 6 | 	it under the terms of the GNU General Public License as published by | 
 | 7 | 	the Free Software Foundation, either version 3 of the License, or | 
 | 8 | 	(at your option) any later version. | 
 | 9 |  | 
 | 10 | 	TWRP is distributed in the hope that it will be useful, | 
 | 11 | 	but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | 12 | 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | 13 | 	GNU General Public License for more details. | 
 | 14 |  | 
 | 15 | 	You should have received a copy of the GNU General Public License | 
 | 16 | 	along with TWRP.  If not, see <http://www.gnu.org/licenses/>. | 
 | 17 | */ | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 18 |  | 
 | 19 | #ifndef __TWRP_Partition_Manager | 
 | 20 | #define __TWRP_Partition_Manager | 
 | 21 |  | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 22 | #include <vector> | 
 | 23 | #include <string> | 
| bigbiff bigbiff | 34684ff | 2013-12-01 21:03:45 -0500 | [diff] [blame] | 24 | #include "twrpDU.hpp" | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 25 | #include "tw_atomic.hpp" | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 26 |  | 
 | 27 | #define MAX_FSTAB_LINE_LENGTH 2048 | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 28 |  | 
| Dees_Troy | 51a0e82 | 2012-09-05 15:24:24 -0400 | [diff] [blame] | 29 | using namespace std; | 
 | 30 |  | 
| Dees_Troy | a13d74f | 2013-03-24 08:54:55 -0500 | [diff] [blame] | 31 | struct PartitionList { | 
 | 32 | 	std::string Display_Name; | 
 | 33 | 	std::string Mount_Point; | 
 | 34 | 	unsigned int selected; | 
 | 35 | }; | 
 | 36 |  | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 37 | // Partition class | 
 | 38 | class TWPartition | 
 | 39 | { | 
 | 40 | public: | 
 | 41 | 	enum Backup_Method_enum { | 
 | 42 | 		NONE = 0, | 
 | 43 | 		FILES = 1, | 
 | 44 | 		DD = 2, | 
 | 45 | 		FLASH_UTILS = 3, | 
 | 46 | 	}; | 
 | 47 |  | 
 | 48 | public: | 
| that | 9e0593e | 2014-10-08 00:01:24 +0200 | [diff] [blame] | 49 | 	TWPartition(); | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 50 | 	virtual ~TWPartition(); | 
 | 51 |  | 
 | 52 | public: | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 53 | 	bool Is_Mounted();                                                        // Checks mount to see if the partition is currently mounted | 
 | 54 | 	bool Mount(bool Display_Error);                                           // Mounts the partition if it is not mounted | 
 | 55 | 	bool UnMount(bool Display_Error);                                         // Unmounts the partition if it is mounted | 
 | 56 | 	bool Wipe(string New_File_System);                                        // Wipes the partition | 
 | 57 | 	bool Wipe();                                                              // Wipes the partition | 
 | 58 | 	bool Wipe_AndSec();                                                       // Wipes android secure | 
| Ethan Yonker | 87c7bac | 2014-05-25 21:41:08 -0500 | [diff] [blame] | 59 | 	bool Can_Repair();                                                        // Checks to see if we have everything needed to be able to repair the current file system | 
| bigbiff | 7cb4c33 | 2014-11-26 20:36:07 -0500 | [diff] [blame] | 60 | 	uint64_t Get_Max_FileSize();					  	  //get partition maxFileSie | 
| Ethan Yonker | 87c7bac | 2014-05-25 21:41:08 -0500 | [diff] [blame] | 61 | 	bool Repair();                                                            // Repairs the current file system | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 62 | 	bool Backup(string backup_folder, const unsigned long long *overall_size, const unsigned long long *other_backups_size, pid_t &tar_fork_pid); // Backs up the partition to the folder specified | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 63 | 	bool Check_MD5(string restore_folder);                                    // Checks MD5 of a backup | 
| Ethan Yonker | 1b7a31b | 2014-07-03 15:09:22 -0500 | [diff] [blame] | 64 | 	bool Restore(string restore_folder, const unsigned long long *total_restore_size, unsigned long long *already_restored_size); // Restores the partition using the backup folder provided | 
 | 65 | 	unsigned long long Get_Restore_Size(string restore_folder);               // Returns the overall restore size of the backup | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 66 | 	string Backup_Method_By_Name();                                           // Returns a string of the backup method for human readable output | 
 | 67 | 	bool Decrypt(string Password);                                            // Decrypts the partition, return 0 for failure and -1 for success | 
 | 68 | 	bool Wipe_Encryption();                                                   // Ignores wipe commands for /data/media devices and formats the original block device | 
 | 69 | 	void Check_FS_Type();                                                     // Checks the fs type using blkid, does not do anything on MTD / yaffs2 because this crashes on some devices | 
 | 70 | 	bool Update_Size(bool Display_Error);                                     // Updates size information | 
 | 71 | 	void Recreate_Media_Folder();                                             // Recreates the /data/media folder | 
| Ethan Yonker | 96af84a | 2015-01-05 14:58:36 -0600 | [diff] [blame] | 72 | 	bool Flash_Image(string Filename);                                        // Flashes an image to the partition | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 73 |  | 
| Dees_Troy | 7c2dec8 | 2012-09-26 09:49:14 -0400 | [diff] [blame] | 74 | public: | 
 | 75 | 	string Current_File_System;                                               // Current file system | 
 | 76 | 	string Actual_Block_Device;                                               // Actual block device (one of primary, alternate, or decrypted) | 
| Dees_Troy | 094207a | 2012-09-26 12:00:39 -0400 | [diff] [blame] | 77 | 	string MTD_Name;                                                          // Name of the partition for MTD devices | 
| bigbiff bigbiff | c7eee6f | 2014-09-02 18:59:01 -0400 | [diff] [blame] | 78 | 	bool Is_Present;                                                          // Indicates if the partition is currently present as a block device | 
| Ethan Yonker | 253368a | 2014-11-25 15:00:52 -0600 | [diff] [blame] | 79 | 	string Crypto_Key_Location;                                               // Location of the crypto key used for decrypting encrypted data partitions | 
| Ethan Yonker | 726a020 | 2014-12-16 20:01:38 -0600 | [diff] [blame] | 80 | 	unsigned int MTP_Storage_ID; | 
| Dees_Troy | 7c2dec8 | 2012-09-26 09:49:14 -0400 | [diff] [blame] | 81 |  | 
| Ethan Yonker | 1eff6cd | 2014-09-15 13:30:42 -0500 | [diff] [blame] | 82 | protected: | 
 | 83 | 	bool Has_Data_Media;                                                      // Indicates presence of /data/media, may affect wiping and backup methods | 
| that | 9e0593e | 2014-10-08 00:01:24 +0200 | [diff] [blame] | 84 | 	void Setup_Data_Media();                                                  // Sets up a partition as a /data/media emulated storage partition | 
| Ethan Yonker | 1eff6cd | 2014-09-15 13:30:42 -0500 | [diff] [blame] | 85 |  | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 86 | private: | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 87 | 	bool Process_Fstab_Line(string Line, bool Display_Error);                 // Processes a fstab line | 
| Dees_Troy | 38bd760 | 2012-09-14 13:33:53 -0400 | [diff] [blame] | 88 | 	void Find_Actual_Block_Device();                                          // Determines the correct block device and stores it in Actual_Block_Device | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 89 |  | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 90 | 	bool Process_Flags(string Flags, bool Display_Error);                     // Process custom fstab flags | 
| Hashcode | 62bd9e0 | 2013-11-19 21:59:42 -0800 | [diff] [blame] | 91 | 	bool Process_FS_Flags(string& Options, int Flags);                        // Process standard fstab fs flags | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 92 | 	bool Is_File_System(string File_System);                                  // Checks to see if the file system given is considered a file system | 
 | 93 | 	bool Is_Image(string File_System);                                        // Checks to see if the file system given is considered an image | 
 | 94 | 	void Setup_File_System(bool Display_Error);                               // Sets defaults for a file system partition | 
 | 95 | 	void Setup_Image(bool Display_Error);                                     // Sets defaults for an image partition | 
 | 96 | 	void Setup_AndSec(void);                                                  // Sets up .android_secure settings | 
 | 97 | 	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 | 
 | 98 | 	bool Find_Partition_Size();                                               // Finds the partition size from /proc/partitions | 
 | 99 | 	unsigned long long Get_Size_Via_du(string Path, bool Display_Error);      // Uses du to get sizes | 
 | 100 | 	bool Wipe_EXT23(string File_System);                                      // Formats as ext3 or ext2 | 
 | 101 | 	bool Wipe_EXT4();                                                         // Formats using ext4, uses make_ext4fs when present | 
 | 102 | 	bool Wipe_FAT();                                                          // Formats as FAT if mkdosfs exits otherwise rm -rf wipe | 
 | 103 | 	bool Wipe_EXFAT();                                                        // Formats as EXFAT | 
 | 104 | 	bool Wipe_MTD();                                                          // Formats as yaffs2 for MTD memory types | 
 | 105 | 	bool Wipe_RMRF();                                                         // Uses rm -rf to wipe | 
| Dees_Troy | e501704 | 2013-08-29 16:38:55 +0000 | [diff] [blame] | 106 | 	bool Wipe_F2FS();                                                         // Uses mkfs.f2fs to wipe | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 107 | 	bool Wipe_Data_Without_Wiping_Media();                                    // Uses rm -rf to wipe but does not wipe /data/media | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 108 | 	bool Backup_Tar(string backup_folder, const unsigned long long *overall_size, const unsigned long long *other_backups_size, pid_t &tar_fork_pid); // Backs up using tar for file systems | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 109 | 	bool Backup_DD(string backup_folder);                                     // Backs up using dd for emmc memory types | 
 | 110 | 	bool Backup_Dump_Image(string backup_folder);                             // Backs up using dump_image for MTD memory types | 
| Ethan Yonker | 1b7a31b | 2014-07-03 15:09:22 -0500 | [diff] [blame] | 111 | 	string Get_Restore_File_System(string restore_folder);                    // Returns the file system that was in place at the time of the backup | 
 | 112 | 	bool Restore_Tar(string restore_folder, string Restore_File_System, const unsigned long long *total_restore_size, unsigned long long *already_restored_size); // Restore using tar for file systems | 
| Ethan Yonker | 96af84a | 2015-01-05 14:58:36 -0600 | [diff] [blame] | 113 | 	bool Restore_Image(string restore_folder, const unsigned long long *total_restore_size, unsigned long long *already_restored_size, string Restore_File_System); // Restore using dd for images | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 114 | 	bool Get_Size_Via_statfs(bool Display_Error);                             // Get Partition size, used, and free space using statfs | 
 | 115 | 	bool Get_Size_Via_df(bool Display_Error);                                 // Get Partition size, used, and free space using df command | 
 | 116 | 	bool Make_Dir(string Path, bool Display_Error);                           // Creates a directory if it doesn't already exist | 
 | 117 | 	bool Find_MTD_Block_Device(string MTD_Name);                              // Finds the mtd block device based on the name from the fstab | 
 | 118 | 	void Recreate_AndSec_Folder(void);                                        // Recreates the .android_secure folder | 
 | 119 | 	void Mount_Storage_Retry(void);                                           // Tries multiple times with a half second delay to mount a device in case storage is slow to mount | 
| Ethan Yonker | 96af84a | 2015-01-05 14:58:36 -0600 | [diff] [blame] | 120 | 	bool Flash_Image_DD(string Filename);                                     // Flashes an image to the partition using dd | 
 | 121 | 	bool Flash_Image_FI(string Filename);                                     // Flashes an image to the partition using flash_image for mtd nand | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 122 |  | 
 | 123 | private: | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 124 | 	bool Can_Be_Mounted;                                                      // Indicates that the partition can be mounted | 
 | 125 | 	bool Can_Be_Wiped;                                                        // Indicates that the partition can be wiped | 
| Dees_Troy | a13d74f | 2013-03-24 08:54:55 -0500 | [diff] [blame] | 126 | 	bool Can_Be_Backed_Up;                                                    // Indicates that the partition will show up in the backup list | 
| Hashcode | dabfd49 | 2013-08-29 22:45:30 -0700 | [diff] [blame] | 127 | 	bool Use_Rm_Rf;                                                           // Indicates that the partition will always be formatted w/ "rm -rf *" | 
| Dees_Troy | 51a0e82 | 2012-09-05 15:24:24 -0400 | [diff] [blame] | 128 | 	bool Wipe_During_Factory_Reset;                                           // Indicates that this partition is wiped during a factory reset | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 129 | 	bool Wipe_Available_in_GUI;                                               // Inidcates that the wipe can be user initiated in the GUI system | 
 | 130 | 	bool Is_SubPartition;                                                     // Indicates that this partition is a sub-partition of another partition (e.g. datadata is a sub-partition of data) | 
| Dees_Troy | 5112731 | 2012-09-08 13:08:49 -0400 | [diff] [blame] | 131 | 	bool Has_SubPartition;                                                    // Indicates that this partition has a sub-partition | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 132 | 	string SubPartition_Of;                                                   // Indicates which partition is the parent partition of this partition (e.g. /data is the parent partition of /datadata) | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 133 | 	string Symlink_Path;                                                      // Symlink path (e.g. /data/media) | 
 | 134 | 	string Symlink_Mount_Point;                                               // /sdcard could be the symlink mount point for /data/media | 
 | 135 | 	string Mount_Point;                                                       // Mount point for this partition (e.g. /system or /data) | 
| Dees_Troy | e58d526 | 2012-09-21 12:27:57 -0400 | [diff] [blame] | 136 | 	string Backup_Path;                                                       // Path for backup | 
| Dees_Troy | 38bd760 | 2012-09-14 13:33:53 -0400 | [diff] [blame] | 137 | 	string Primary_Block_Device;                                              // Block device (e.g. /dev/block/mmcblk1p1) | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 138 | 	string Alternate_Block_Device;                                            // Alternate block device (e.g. /dev/block/mmcblk1) | 
| Dees_Troy | 38bd760 | 2012-09-14 13:33:53 -0400 | [diff] [blame] | 139 | 	string Decrypted_Block_Device;                                            // Decrypted block device available after decryption | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 140 | 	bool Removable;                                                           // Indicates if this partition is removable -- affects how often we check overall size, if present, etc. | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 141 | 	int Length;                                                               // Used by make_ext4fs to leave free space at the end of the partition block for things like a crypto footer | 
 | 142 | 	unsigned long long Size;                                                  // Overall size of the partition | 
 | 143 | 	unsigned long long Used;                                                  // Overall used space | 
 | 144 | 	unsigned long long Free;                                                  // Overall free space | 
 | 145 | 	unsigned long long Backup_Size;                                           // Backup size -- may be different than used space especially when /data/media is present | 
| Ethan Yonker | 1b7a31b | 2014-07-03 15:09:22 -0500 | [diff] [blame] | 146 | 	unsigned long long Restore_Size;                                          // Restore size of the current restore operation | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 147 | 	bool Can_Be_Encrypted;                                                    // This partition might be encrypted, affects error handling, can only be true if crypto support is compiled in | 
 | 148 | 	bool Is_Encrypted;                                                        // This partition is thought to be encrypted -- it wouldn't mount for some reason, only avialble with crypto support | 
 | 149 | 	bool Is_Decrypted;                                                        // This partition has successfully been decrypted | 
| Ethan Yonker | 253368a | 2014-11-25 15:00:52 -0600 | [diff] [blame] | 150 | 	bool Mount_To_Decrypt;                                                    // Mount this partition during decrypt (/vendor, /firmware, etc in case we need proprietary libs or firmware files) | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 151 | 	string Display_Name;                                                      // Display name for the GUI | 
 | 152 | 	string Backup_Name;                                                       // Backup name -- used for backup filenames | 
| Dees_Troy | a13d74f | 2013-03-24 08:54:55 -0500 | [diff] [blame] | 153 | 	string Backup_Display_Name;                                               // Name displayed in the partition list for backup selection | 
 | 154 | 	string Storage_Name;                                                      // Name displayed in the partition list for storage selection | 
| Dees_Troy | 63c8df7 | 2012-09-10 14:02:05 -0400 | [diff] [blame] | 155 | 	string Backup_FileName;                                                   // Actual backup filename | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 156 | 	Backup_Method_enum Backup_Method;                                         // Method used for backup | 
| Dees_Troy | 83bd483 | 2013-05-04 12:39:56 +0000 | [diff] [blame] | 157 | 	bool Can_Encrypt_Backup;                                                  // Indicates if this item can be encrypted during backup | 
 | 158 | 	bool Use_Userdata_Encryption;                                             // Indicates if we will use userdata encryption splitting on an encrypted backup | 
| Dees_Troy | e58d526 | 2012-09-21 12:27:57 -0400 | [diff] [blame] | 159 | 	bool Has_Android_Secure;                                                  // Indicates the presence of .android_secure on this partition | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 160 | 	bool Is_Storage;                                                          // Indicates if this partition is used for storage for backup, restore, and installing zips | 
| Dees_Troy | a13d74f | 2013-03-24 08:54:55 -0500 | [diff] [blame] | 161 | 	bool Is_Settings_Storage;                                                 // Indicates that this storage partition is the location of the .twrps settings file and the location that is used for custom themes | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 162 | 	string Storage_Path;                                                      // Indicates the path to the storage -- root indicates mount point, media/ indicates e.g. /data/media | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 163 | 	string Fstab_File_System;                                                 // File system from the recovery.fstab | 
| Hashcode | 62bd9e0 | 2013-11-19 21:59:42 -0800 | [diff] [blame] | 164 | 	int Mount_Flags;                                                          // File system flags from recovery.fstab | 
 | 165 | 	string Mount_Options;                                                     // File system options from recovery.fstab | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 166 | 	int Format_Block_Size;                                                    // Block size for formatting | 
| Dees_Troy | 68cab49 | 2012-12-12 19:29:35 +0000 | [diff] [blame] | 167 | 	bool Ignore_Blkid;                                                        // Ignore blkid results due to superblocks lying to us on certain devices / partitions | 
| Dees_Troy | 16c2b31 | 2013-01-15 16:51:18 +0000 | [diff] [blame] | 168 | 	bool Retain_Layout_Version;                                               // Retains the .layout_version file during a wipe (needed on devices like Sony Xperia T where /data and /data/media are separate partitions) | 
| Ethan Yonker | 96af84a | 2015-01-05 14:58:36 -0600 | [diff] [blame] | 169 | 	bool Can_Flash_Img;                                                       // Indicates if this partition can have images flashed to it via the GUI | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 170 |  | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 171 | friend class TWPartitionManager; | 
| Dees_Troy | a13d74f | 2013-03-24 08:54:55 -0500 | [diff] [blame] | 172 | friend class DataManager; | 
 | 173 | friend class GUIPartitionList; | 
| Ethan Yonker | 87c7bac | 2014-05-25 21:41:08 -0500 | [diff] [blame] | 174 | friend class GUIAction; | 
| Dees_Troy | 51a0e82 | 2012-09-05 15:24:24 -0400 | [diff] [blame] | 175 | }; | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 176 |  | 
 | 177 | class TWPartitionManager | 
 | 178 | { | 
 | 179 | public: | 
| bigbiff bigbiff | 34684ff | 2013-12-01 21:03:45 -0500 | [diff] [blame] | 180 | 	TWPartitionManager();													  // Constructor for TWRPartionManager | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 181 | 	~TWPartitionManager() {} | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 182 |  | 
 | 183 | public: | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 184 | 	int Process_Fstab(string Fstab_Filename, bool Display_Error);             // Parses the fstab and populates the partitions | 
 | 185 | 	int Write_Fstab();                                                        // Creates /etc/fstab file that's used by the command line for mount commands | 
 | 186 | 	void Output_Partition_Logging();                                          // Outputs partition information to the log | 
 | 187 | 	int Mount_By_Path(string Path, bool Display_Error);                       // Mounts partition based on path (e.g. /system) | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 188 | 	int UnMount_By_Path(string Path, bool Display_Error);                     // Unmounts partition based on path | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 189 | 	int Is_Mounted_By_Path(string Path);                                      // Checks if partition is mounted based on path | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 190 | 	int Mount_Current_Storage(bool Display_Error);                            // Mounts the current storage location | 
 | 191 | 	int Mount_Settings_Storage(bool Display_Error);                           // Mounts the settings file storage location (usually internal) | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 192 | 	TWPartition* Find_Partition_By_Path(string Path);                         // Returns a pointer to a partition based on path | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 193 | 	int Check_Backup_Name(bool Display_Error);                                // Checks the current backup name to ensure that it is valid | 
 | 194 | 	int Run_Backup();                                                         // Initiates a backup in the current storage | 
 | 195 | 	int Run_Restore(string Restore_Name);                                     // Restores a backup | 
 | 196 | 	void Set_Restore_Files(string Restore_Name);                              // Used to gather a list of available backup partitions for the user to select for a restore | 
 | 197 | 	int Wipe_By_Path(string Path);                                            // Wipes a partition based on path | 
| Ethan Yonker | 87c7bac | 2014-05-25 21:41:08 -0500 | [diff] [blame] | 198 | 	int Wipe_By_Path(string Path, string New_File_System);                    // Wipes a partition based on path | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 199 | 	int Factory_Reset();                                                      // Performs a factory reset | 
 | 200 | 	int Wipe_Dalvik_Cache();                                                  // Wipes dalvik cache | 
 | 201 | 	int Wipe_Rotate_Data();                                                   // Wipes rotation data -- | 
 | 202 | 	int Wipe_Battery_Stats();                                                 // Wipe battery stats -- /data/system/batterystats.bin | 
 | 203 | 	int Wipe_Android_Secure();                                                // Wipes android secure | 
 | 204 | 	int Format_Data();                                                        // Really formats data on /data/media devices -- also removes encryption | 
 | 205 | 	int Wipe_Media_From_Data();                                               // Removes and recreates the media folder on /data/media devices | 
| Ethan Yonker | 87c7bac | 2014-05-25 21:41:08 -0500 | [diff] [blame] | 206 | 	int Repair_By_Path(string Path, bool Display_Error);                      // Repairs a partition based on path | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 207 | 	void Update_System_Details();                                             // Updates fstab, file systems, sizes, etc. | 
 | 208 | 	int Decrypt_Device(string Password);                                      // Attempt to decrypt any encrypted partitions | 
 | 209 | 	int usb_storage_enable(void);                                             // Enable USB storage mode | 
 | 210 | 	int usb_storage_disable(void);                                            // Disable USB storage mode | 
 | 211 | 	void Mount_All_Storage(void);                                             // Mounts all storage locations | 
 | 212 | 	void UnMount_Main_Partitions(void);                                       // Unmounts system and data if not data/media and boot if boot is mountable | 
 | 213 | 	int Partition_SDCard(void);                                               // Repartitions the sdcard | 
| Vojtech Bocek | 93cb1ef | 2014-05-12 15:41:52 +0200 | [diff] [blame] | 214 | 	TWPartition *Get_Default_Storage_Partition();                             // Returns a pointer to a default storage partition | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 215 | 	int Cancel_Backup();                                                      // Signals partition backup to cancel | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 216 |  | 
| Vojtech Bocek | 8b44bbd | 2013-07-25 20:43:29 +0200 | [diff] [blame] | 217 | 	int Fix_Permissions(); | 
 | 218 | 	void Get_Partition_List(string ListType, std::vector<PartitionList> *Partition_List); | 
 | 219 | 	int Fstab_Processed();                                                    // Indicates if the fstab has been processed or not | 
 | 220 | 	void Output_Storage_Fstab();                                              // Creates a /cache/recovery/storage.fstab file with a list of all potential storage locations for app use | 
| bigbiff bigbiff | c7eee6f | 2014-09-02 18:59:01 -0400 | [diff] [blame] | 221 | 	bool Enable_MTP();                                                        // Enables MTP | 
| Ethan Yonker | 1b03920 | 2015-01-30 10:08:48 -0600 | [diff] [blame] | 222 | 	void Add_All_MTP_Storage();                                               // Adds all storage objects for MTP | 
| bigbiff bigbiff | c7eee6f | 2014-09-02 18:59:01 -0400 | [diff] [blame] | 223 | 	bool Disable_MTP();                                                       // Disables MTP | 
| Ethan Yonker | 726a020 | 2014-12-16 20:01:38 -0600 | [diff] [blame] | 224 | 	bool Add_MTP_Storage(string Mount_Point);                                 // Adds or removes an MTP Storage partition | 
 | 225 | 	bool Add_MTP_Storage(unsigned int Storage_ID);                            // Adds or removes an MTP Storage partition | 
 | 226 | 	bool Remove_MTP_Storage(string Mount_Point);                              // Adds or removes an MTP Storage partition | 
 | 227 | 	bool Remove_MTP_Storage(unsigned int Storage_ID);                         // Adds or removes an MTP Storage partition | 
| Ethan Yonker | 96af84a | 2015-01-05 14:58:36 -0600 | [diff] [blame] | 228 | 	bool Flash_Image(string Filename);                                        // Flashes an image to a selected partition from the partition list | 
| Dees_Troy | a13d74f | 2013-03-24 08:54:55 -0500 | [diff] [blame] | 229 |  | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 230 | 	TWAtomicInt stop_backup; | 
 | 231 |  | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 232 | private: | 
| Matt Mower | bf4efa3 | 2014-04-14 23:25:26 -0500 | [diff] [blame] | 233 | 	void Setup_Settings_Storage_Partition(TWPartition* Part);                 // Sets up settings storage | 
 | 234 | 	void Setup_Android_Secure_Location(TWPartition* Part);                    // Sets up .android_secure if needed | 
| Dees_Troy | 43d8b00 | 2012-09-17 16:00:01 -0400 | [diff] [blame] | 235 | 	bool Make_MD5(bool generate_md5, string Backup_Folder, string Backup_Filename); // Generates an MD5 after a backup is made | 
| Dees_Troy | 093b764 | 2012-09-21 15:59:38 -0400 | [diff] [blame] | 236 | 	bool Backup_Partition(TWPartition* Part, string Backup_Folder, bool generate_md5, unsigned long long* img_bytes_remaining, unsigned long long* file_bytes_remaining, unsigned long *img_time, unsigned long *file_time, unsigned long long *img_bytes, unsigned long long *file_bytes); | 
| Ethan Yonker | 1b7a31b | 2014-07-03 15:09:22 -0500 | [diff] [blame] | 237 | 	bool Restore_Partition(TWPartition* Part, string Restore_Name, int partition_count, const unsigned long long *total_restore_size, unsigned long long *already_restored_size); | 
| Dees_Troy | 8170a92 | 2012-09-18 15:40:25 -0400 | [diff] [blame] | 238 | 	void Output_Partition(TWPartition* Part); | 
| Ethan Yonker | 726a020 | 2014-12-16 20:01:38 -0600 | [diff] [blame] | 239 | 	TWPartition* Find_Partition_By_MTP_Storage_ID(unsigned int Storage_ID);   // Returns a pointer to a partition based on MTP Storage ID | 
 | 240 | 	bool Add_Remove_MTP_Storage(TWPartition* Part, int message_type);   // Adds or removes an MTP Storage partition | 
| Ethan Yonker | 47360be | 2014-04-01 10:34:34 -0500 | [diff] [blame] | 241 | 	TWPartition* Find_Next_Storage(string Path, string Exclude); | 
| Dees_Troy | d21618c | 2012-10-14 18:48:49 -0400 | [diff] [blame] | 242 | 	int Open_Lun_File(string Partition_Path, string Lun_File); | 
| Ethan Yonker | 8dfa777 | 2014-09-04 21:48:41 -0500 | [diff] [blame] | 243 | 	pid_t mtppid; | 
| bigbiff bigbiff | c7eee6f | 2014-09-02 18:59:01 -0400 | [diff] [blame] | 244 | 	bool mtp_was_enabled; | 
| Ethan Yonker | 726a020 | 2014-12-16 20:01:38 -0600 | [diff] [blame] | 245 | 	int mtp_write_fd; | 
| bigbiff | 7abc5fe | 2015-01-17 16:53:12 -0500 | [diff] [blame] | 246 | 	pid_t tar_fork_pid; | 
| Dees_Troy | 43d8b00 | 2012-09-17 16:00:01 -0400 | [diff] [blame] | 247 |  | 
 | 248 | private: | 
| Dees_Troy | 5112731 | 2012-09-08 13:08:49 -0400 | [diff] [blame] | 249 | 	std::vector<TWPartition*> Partitions;                                     // Vector list of all partitions | 
| Dees_Troy | 51a0e82 | 2012-09-05 15:24:24 -0400 | [diff] [blame] | 250 | }; | 
| Dees_Troy | 240e4a7 | 2012-09-04 09:22:39 -0400 | [diff] [blame] | 251 |  | 
| Dees_Troy | 5bf4392 | 2012-09-07 16:07:55 -0400 | [diff] [blame] | 252 | extern TWPartitionManager PartitionManager; | 
 | 253 |  | 
 | 254 | #endif // __TWRP_Partition_Manager |