summaryrefslogtreecommitdiffstats
path: root/partitionmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--partitionmanager.cpp31
1 files changed, 21 insertions, 10 deletions
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index af89e404c..0063ff3ea 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -56,6 +56,8 @@ extern "C" {
#endif
#endif
+extern bool datamedia;
+
TWPartitionManager::TWPartitionManager(void) {
mtpid = 100;
mtp_was_enabled = false;
@@ -100,6 +102,16 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error)
}
}
fclose(fstabFile);
+ if (!datamedia && !settings_partition && Find_Partition_By_Path("/sdcard") == NULL && Find_Partition_By_Path("/internal_sd") == NULL && Find_Partition_By_Path("/internal_sdcard") == NULL && Find_Partition_By_Path("/emmc") == NULL) {
+ // Attempt to automatically identify /data/media emulated storage devices
+ TWPartition* Dat = Find_Partition_By_Path("/data");
+ if (Dat) {
+ LOGINFO("Using automatic handling for /data/media emulated storage device.\n");
+ datamedia = true;
+ Dat->Setup_Data_Media(++mtpid);
+ settings_partition = Dat;
+ }
+ }
if (!settings_partition) {
std::vector<TWPartition*>::iterator iter;
for (iter = Partitions.begin(); iter != Partitions.end(); iter++) {
@@ -168,10 +180,8 @@ void TWPartitionManager::Setup_Settings_Storage_Partition(TWPartition* Part) {
void TWPartitionManager::Setup_Android_Secure_Location(TWPartition* Part) {
if (Part->Has_Android_Secure)
Part->Setup_AndSec();
-#ifndef RECOVERY_SDCARD_ON_DATA
- else
+ else if (!datamedia)
Part->Setup_AndSec();
-#endif
}
void TWPartitionManager::Output_Partition_Logging(void) {
@@ -270,9 +280,12 @@ void TWPartitionManager::Output_Partition(TWPartition* Part) {
if (!Part->MTD_Name.empty())
printf(" MTD_Name: %s\n", Part->MTD_Name.c_str());
string back_meth = Part->Backup_Method_By_Name();
- printf(" Backup_Method: %s\n\n", back_meth.c_str());
+ printf(" Backup_Method: %s\n", back_meth.c_str());
if (Part->Mount_Flags || !Part->Mount_Options.empty())
printf(" Mount_Flags=0x%8x, Mount_Options=%s\n", Part->Mount_Flags, Part->Mount_Options.c_str());
+ if (Part->mtpid)
+ printf(" MTP Storage ID: %i\n", Part->mtpid);
+ printf("\n");
}
int TWPartitionManager::Mount_By_Path(string Path, bool Display_Error) {
@@ -1660,15 +1673,13 @@ int TWPartitionManager::Decrypt_Device(string Password) {
// Sleep for a bit so that the device will be ready
sleep(1);
-#ifdef RECOVERY_SDCARD_ON_DATA
- if (dat->Mount(false) && TWFunc::Path_Exists("/data/media/0")) {
+ if (dat->Has_Data_Media && dat->Mount(false) && TWFunc::Path_Exists("/data/media/0")) {
dat->Storage_Path = "/data/media/0";
dat->Symlink_Path = dat->Storage_Path;
DataManager::SetValue("tw_storage_path", "/data/media/0");
dat->UnMount(false);
Output_Partition(dat);
}
-#endif
Update_System_Details();
UnMount_Main_Partitions();
} else
@@ -1843,9 +1854,9 @@ void TWPartitionManager::UnMount_Main_Partitions(void) {
TWPartition* Boot_Partition = Find_Partition_By_Path("/boot");
UnMount_By_Path("/system", true);
-#ifndef RECOVERY_SDCARD_ON_DATA
- UnMount_By_Path("/data", true);
-#endif
+ if (!datamedia)
+ UnMount_By_Path("/data", true);
+
if (Boot_Partition != NULL && Boot_Partition->Can_Be_Mounted)
Boot_Partition->UnMount(true);
}