partition: recreate tw_internal_path(/data/media/0), after wipe media from data or format /data.

Change-Id: I3671d7a5759260a4e74952168483a6816eb28f5d
diff --git a/partition.cpp b/partition.cpp
index 9c5462d..e154564 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -1051,7 +1051,7 @@
 	if (Removable)
 		Update_Size(Display_Error);
 
-	if (!Symlink_Mount_Point.empty()) {
+	if (!Symlink_Mount_Point.empty() && TWFunc::Path_Exists(Symlink_Path)) {
 		string Command = "mount -o bind '" + Symlink_Path + "' '" + Symlink_Mount_Point + "'";
 		TWFunc::Exec_Cmd(Command);
 	}
@@ -2116,15 +2116,22 @@
 	} else if (!TWFunc::Path_Exists("/data/media")) {
 		PartitionManager.Mount_By_Path(Symlink_Mount_Point, true);
 		LOGINFO("Recreating /data/media folder.\n");
-		mkdir("/data/media", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
+		mkdir("/data/media", 0770);
+		string Internal_path = DataManager::GetStrValue("tw_internal_path");
+		if (!Internal_path.empty()) {
+			LOGINFO("Recreating %s folder.\n", Internal_path.c_str());
+			mkdir(Internal_path.c_str(), 0770);
+		}
+#ifdef TW_INTERNAL_STORAGE_PATH
+		mkdir(EXPAND(TW_INTERNAL_STORAGE_PATH), 0770);
+#endif
 #ifdef HAVE_SELINUX
-		// Attempt to set the correct SELinux contexts on the folder
-		fixPermissions perms;
-		perms.fixDataInternalContexts();
 		// Afterwards, we will try to set the
 		// default metadata that we were hopefully able to get during
 		// early boot.
 		tw_set_default_metadata("/data/media");
+		if (!Internal_path.empty())
+			tw_set_default_metadata(Internal_path.c_str());
 #endif
 		// Toggle mount to ensure that "internal sdcard" gets mounted
 		PartitionManager.UnMount_By_Path(Symlink_Mount_Point, true);
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 572cd7c..0262648 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -1212,16 +1212,7 @@
 		gui_print("Wiping internal storage -- /data/media...\n");
 		Remove_MTP_Storage(dat->MTP_Storage_ID);
 		TWFunc::removeDir("/data/media", false);
-		if (mkdir("/data/media", S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP) != 0) {
-			Add_MTP_Storage(dat->MTP_Storage_ID);
-			return false;
-		}
-		if (dat->Has_Data_Media) {
-			dat->Recreate_Media_Folder();
-			// Unmount and remount - slightly hackish way to ensure that the "/sdcard" folder is still mounted properly after wiping
-			dat->UnMount(false);
-			dat->Mount(false);
-		}
+		dat->Recreate_Media_Folder();
 		Add_MTP_Storage(dat->MTP_Storage_ID);
 		return true;
 	} else {