From 72c87ce3472380ad16267be958923c1d2635dc93 Mon Sep 17 00:00:00 2001 From: Matt Mower Date: Tue, 26 Apr 2016 14:34:56 -0500 Subject: Wait to mount until after fstab processed The necessity to process fstab twice stems from mounting partitions while still processing. Instead, wait to finish setup of /data, /cache and storage parameters until after fstab has been processed (once). Change-Id: Id77e1edbab5eb68a7cd4a1f34953d819a043d47a --- partitionmanager.cpp | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'partitionmanager.cpp') diff --git a/partitionmanager.cpp b/partitionmanager.cpp index cc36b2eec..320944c3f 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -92,29 +92,35 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) fstab_line[strlen(fstab_line)] = '\n'; TWPartition* partition = new TWPartition(); - if (partition->Process_Fstab_Line(fstab_line, Display_Error)) { - if (partition->Is_Storage) { - ++storageid; - partition->MTP_Storage_ID = storageid; - } - if (!settings_partition && partition->Is_Settings_Storage && partition->Is_Present) { - settings_partition = partition; - } else { - partition->Is_Settings_Storage = false; - } - if (!andsec_partition && partition->Has_Android_Secure && partition->Is_Present) { - andsec_partition = partition; - } else { - partition->Has_Android_Secure = false; - } + if (partition->Process_Fstab_Line(fstab_line, Display_Error)) Partitions.push_back(partition); - } else { + else delete partition; - } memset(fstab_line, 0, sizeof(fstab_line)); } fclose(fstabFile); + + std::vector::iterator iter; + for (iter = Partitions.begin(); iter != Partitions.end(); iter++) { + (*iter)->Partition_Post_Processing(Display_Error); + + if ((*iter)->Is_Storage) { + ++storageid; + (*iter)->MTP_Storage_ID = storageid; + } + + if (!settings_partition && (*iter)->Is_Settings_Storage && (*iter)->Is_Present) + settings_partition = (*iter); + else + (*iter)->Is_Settings_Storage = false; + + if (!andsec_partition && (*iter)->Has_Android_Secure && (*iter)->Is_Present) + andsec_partition = (*iter); + else + (*iter)->Has_Android_Secure = false; + } + 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"); @@ -129,7 +135,6 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) } } if (!settings_partition) { - std::vector::iterator iter; for (iter = Partitions.begin(); iter != Partitions.end(); iter++) { if ((*iter)->Is_Storage) { settings_partition = (*iter); -- cgit v1.2.3