Fix special partition handling
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 9685072..a42c303 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -66,6 +66,7 @@
 
 		TWPartition* partition = new TWPartition();
 		string line = fstab_line;
+		memset(fstab_line, 0, sizeof(fstab_line));
 
 		if (partition->Process_Fstab_Line(line, Display_Error)) {
 			Partitions.push_back(partition);
@@ -646,7 +647,7 @@
 #ifdef SP1_NAME
 	DataManager::GetValue(TW_BACKUP_SP1_VAR, check);
 	if (check) {
-		backup_sp1 = Find_Partition_By_Path(SP1_NAME);
+		backup_sp1 = Find_Partition_By_Path(EXPAND(SP1_NAME));
 		if (backup_sp1 != NULL) {
 			partition_count++;
 			if (backup_sp1->Backup_Method == 1)
@@ -654,7 +655,7 @@
 			else
 				img_bytes += backup_sp1->Backup_Size;
 		} else {
-			LOGE("Unable to locate %s partition.\n", SP1_NAME);
+			LOGE("Unable to locate %s partition.\n", EXPAND(SP1_NAME));
 			return false;
 		}
 	}
@@ -662,7 +663,7 @@
 #ifdef SP2_NAME
 	DataManager::GetValue(TW_BACKUP_SP2_VAR, check);
 	if (check) {
-		backup_sp2 = Find_Partition_By_Path(SP2_NAME);
+		backup_sp2 = Find_Partition_By_Path(EXPAND(SP2_NAME));
 		if (backup_sp2 != NULL) {
 			partition_count++;
 			if (backup_sp2->Backup_Method == 1)
@@ -670,7 +671,7 @@
 			else
 				img_bytes += backup_sp2->Backup_Size;
 		} else {
-			LOGE("Unable to locate %s partition.\n", SP2_NAME);
+			LOGE("Unable to locate %s partition.\n", EXPAND(SP2_NAME));
 			return false;
 		}
 	}
@@ -678,7 +679,7 @@
 #ifdef SP3_NAME
 	DataManager::GetValue(TW_BACKUP_SP3_VAR, check);
 	if (check) {
-		backup_sp3 = Find_Partition_By_Path(SP3_NAME);
+		backup_sp3 = Find_Partition_By_Path(EXPAND(SP3_NAME));
 		if (backup_sp3 != NULL) {
 			partition_count++;
 			if (backup_sp3->Backup_Method == 1)
@@ -686,7 +687,7 @@
 			else
 				img_bytes += backup_sp3->Backup_Size;
 		} else {
-			LOGE("Unable to locate %s partition.\n", SP3_NAME);
+			LOGE("Unable to locate %s partition.\n", EXPAND(SP3_NAME));
 			return false;
 		}
 	}
@@ -856,9 +857,9 @@
 #ifdef SP1_NAME
 	DataManager::GetValue(TW_RESTORE_SP1_VAR, check);
 	if (check > 0) {
-		restore_sp1 = Find_Partition_By_Path(SP1_NAME);
+		restore_sp1 = Find_Partition_By_Path(EXPAND(SP1_NAME));
 		if (restore_sp1 == NULL) {
-			LOGE("Unable to locate %s partition.\n", SP1_NAME);
+			LOGE("Unable to locate %s partition.\n", EXPAND(SP1_NAME));
 			return false;
 		}
 		partition_count++;
@@ -867,9 +868,9 @@
 #ifdef SP2_NAME
 	DataManager::GetValue(TW_RESTORE_SP2_VAR, check);
 	if (check > 0) {
-		restore_sp2 = Find_Partition_By_Path(SP2_NAME);
+		restore_sp2 = Find_Partition_By_Path(EXPAND(SP2_NAME));
 		if (restore_sp2 == NULL) {
-			LOGE("Unable to locate %s partition.\n", SP2_NAME);
+			LOGE("Unable to locate %s partition.\n", EXPAND(SP2_NAME));
 			return false;
 		}
 		partition_count++;
@@ -878,9 +879,9 @@
 #ifdef SP3_NAME
 	DataManager::GetValue(TW_RESTORE_SP3_VAR, check);
 	if (check > 0) {
-		restore_sp3 = Find_Partition_By_Path(SP3_NAME);
+		restore_sp3 = Find_Partition_By_Path(EXPAND(SP3_NAME));
 		if (restore_sp3 == NULL) {
-			LOGE("Unable to locate %s partition.\n", SP3_NAME);
+			LOGE("Unable to locate %s partition.\n", EXPAND(SP3_NAME));
 			return false;
 		}
 		partition_count++;
@@ -1049,15 +1050,15 @@
 		if (Part->Backup_Path == "/sd-ext")
 			tw_restore_sdext = 1;
 #ifdef SP1_NAME
-		if (Part->Backup_Path == TWFunc::Get_Root_Path(SP1_Name))
+		if (Part->Backup_Path == TWFunc::Get_Root_Path(EXPAND(SP1_NAME)))
 			tw_restore_sp1 = 1;
 #endif
 #ifdef SP2_NAME
-		if (Part->Backup_Path == TWFunc::Get_Root_Path(SP2_Name))
+		if (Part->Backup_Path == TWFunc::Get_Root_Path(EXPAND(SP2_NAME)))
 			tw_restore_sp2 = 1;
 #endif
 #ifdef SP3_NAME
-		if (Part->Backup_Path == TWFunc::Get_Root_Path(SP3_Name))
+		if (Part->Backup_Path == TWFunc::Get_Root_Path(EXPAND(SP3_NAME)))
 			tw_restore_sp3 = 1;
 #endif
 	}
@@ -1288,6 +1289,24 @@
 				} else
 					DataManager::SetValue(TW_HAS_ANDROID_SECURE, 1);
 			}
+#ifdef SP1_NAME
+			if ((*iter)->Backup_Name == EXPAND(SP1_NAME)) {
+				int backup_display_size = (int)((*iter)->Backup_Size / 1048576LLU);
+				DataManager::SetValue(TW_BACKUP_SP1_SIZE, backup_display_size);
+			}
+#endif
+#ifdef SP2_NAME
+			if ((*iter)->Backup_Name == EXPAND(SP2_NAME)) {
+				int backup_display_size = (int)((*iter)->Backup_Size / 1048576LLU);
+				DataManager::SetValue(TW_BACKUP_SP2_SIZE, backup_display_size);
+			}
+#endif
+#ifdef SP3_NAME
+			if ((*iter)->Backup_Name == EXPAND(SP3_NAME)) {
+				int backup_display_size = (int)((*iter)->Backup_Size / 1048576LLU);
+				DataManager::SetValue(TW_BACKUP_SP3_SIZE, backup_display_size);
+			}
+#endif
 		}
 	}
 	DataManager::SetValue(TW_BACKUP_DATA_SIZE, data_size);
@@ -1302,8 +1321,10 @@
 			if (has_dual_storage == 1) {
 				// We have dual storage, see if we're using the internal storage that should always be present
 				if (current_storage_path == DataManager::GetSettingsStoragePath()) {
-					// Not able to use internal, so error!
-					LOGE("Unable to mount internal storage.\n");
+					if (!FreeStorage->Is_Encrypted) {
+						// Not able to use internal, so error!
+						LOGE("Unable to mount internal storage.\n");
+					}
 					DataManager::SetValue(TW_STORAGE_FREE_SIZE, 0);
 				} else {
 					// We were using external, flip to internal