Reset partition flags when the partition is wiped

Change-Id: I6c4cee5b038fd0c39c8723412dd8f421f7794a00
diff --git a/partition.cpp b/partition.cpp
index d391f98..145fb14 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -733,24 +733,38 @@
 		return Wipe_Data_Without_Wiping_Media();
 
 	int check;
+	bool wiped = false;
 	DataManager::GetValue(TW_RM_RF_VAR, check);
+
 	if (check)
-		return Wipe_RMRF();
+		wiped = Wipe_RMRF();
+	else if (New_File_System == "ext4")
+		wiped = Wipe_EXT4();
+	else if (New_File_System == "ext2" || New_File_System == "ext3")
+		wiped = Wipe_EXT23(New_File_System);
+	else if (New_File_System == "vfat")
+		wiped = Wipe_FAT();
+	else if (New_File_System == "yaffs2")
+		wiped = Wipe_MTD();
+	else {
+		LOGE("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), New_File_System.c_str());
+		return false;
+	}
 
-	if (New_File_System == "ext4")
-		return Wipe_EXT4();
-
-	if (New_File_System == "ext2" || New_File_System == "ext3")
-		return Wipe_EXT23(New_File_System);
-
-	if (New_File_System == "vfat")
-		return Wipe_FAT();
-
-	if (New_File_System == "yaffs2")
-		return Wipe_MTD();
-
-	LOGE("Unable to wipe '%s' -- unknown file system '%s'\n", Mount_Point.c_str(), New_File_System.c_str());
-	return false;
+	if (wiped) {
+		Setup_File_System(false);
+		if (Is_Encrypted && !Is_Decrypted) {
+			// just wiped an encrypted partition back to its unencrypted state
+			Is_Encrypted = false;
+			Is_Decrypted = false;
+			Decrypted_Block_Device = "";
+			if (Mount_Point == "/data") {
+				DataManager::SetValue(TW_IS_ENCRYPTED, 0);
+				DataManager::SetValue(TW_IS_DECRYPTED, 0);
+			}
+		}
+	}
+	return wiped;
 }
 
 bool TWPartition::Wipe() {
@@ -875,12 +889,8 @@
 	if (!UnMount(true))
 		return false;
 
-	Current_File_System = Fstab_File_System;
-	Is_Encrypted = false;
-	Is_Decrypted = false;
-	Decrypted_Block_Device = "";
 	Has_Data_Media = false;
-	if (Wipe()) {
+	if (Wipe(Fstab_File_System)) {
 		Has_Data_Media = Save_Data_Media;
 		if (Has_Data_Media && !Symlink_Mount_Point.empty()) {
 			Recreate_Media_Folder();
@@ -982,6 +992,7 @@
 		sprintf(command, "mke2fs -t %s -m 0 %s", File_System.c_str(), Actual_Block_Device.c_str());
 		LOGI("mke2fs command: %s\n", command);
 		if (system(command) == 0) {
+			Current_File_System = File_System;
 			Recreate_AndSec_Folder();
 			ui_print("Done.\n");
 			return true;
@@ -1015,6 +1026,7 @@
 		Command += " " + Actual_Block_Device;
 		LOGI("make_ext4fs command: %s\n", Command.c_str());
 		if (system(Command.c_str()) == 0) {
+			Current_File_System = "ext4";
 			Recreate_AndSec_Folder();
 			ui_print("Done.\n");
 			return true;
@@ -1039,6 +1051,7 @@
 		Find_Actual_Block_Device();
 		sprintf(command,"mkdosfs %s", Actual_Block_Device.c_str()); // use mkdosfs to format it
 		if (system(command) == 0) {
+			Current_File_System = "vfat";
 			Recreate_AndSec_Folder();
 			ui_print("Done.\n");
 			return true;
@@ -1081,6 +1094,7 @@
         LOGE("Failed to close '%s'", MTD_Name.c_str());
         return false;
     }
+	Current_File_System = "yaffs2";
 	Recreate_AndSec_Folder();
 	ui_print("Done.\n");
     return true;
@@ -1253,7 +1267,6 @@
 	int index = 0;
 	char split_index[5];
 
-	Current_File_System = Restore_File_System;
 	if (Has_Android_Secure) {
 		ui_print("Wiping android secure...\n");
 		if (!Wipe_AndSec())