Add ignore blkid flag for Transformers

Change-Id: I8f2b5b68a8c3ede74858d53002efab997174ee65
diff --git a/partition.cpp b/partition.cpp
index dd8d3b3..32376c1 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -82,6 +82,7 @@
 	Current_File_System = "";
 	Fstab_File_System = "";
 	Format_Block_Size = 0;
+	Ignore_Blkid = false;
 }
 
 TWPartition::~TWPartition(void) {
@@ -152,6 +153,7 @@
 				// Custom flags, save for later so that new values aren't overwritten by defaults
 				ptr += 6;
 				Flags = ptr;
+				Process_Flags(Flags, Display_Error);
 			} else if (strlen(ptr) == 4 && (strncmp(ptr, "NULL", 4) == 0 || strncmp(ptr, "null", 4) == 0 || strncmp(ptr, "null", 4) == 0)) {
 				// Do nothing
 			} else {
@@ -333,6 +335,8 @@
 			ptr += 13;
 			Is_SubPartition = true;
 			SubPartition_Of = ptr;
+		} else if (strcmp(ptr, "ignoreblkid") == 0) {
+			Ignore_Blkid = true;
 		} else if (strlen(ptr) > 8 && strncmp(ptr, "symlink=", 8) == 0) {
 			ptr += 8;
 			Symlink_Path = ptr;
@@ -881,8 +885,8 @@
 	char* arg;
 	char* ptr;
 
-	if (Fstab_File_System == "yaffs2" || Fstab_File_System == "mtd" || Fstab_File_System == "bml")
-		return; // Running blkid on some mtd devices causes a massive crash
+	if (Fstab_File_System == "yaffs2" || Fstab_File_System == "mtd" || Fstab_File_System == "bml" || Ignore_Blkid)
+		return; // Running blkid on some mtd devices causes a massive crash or needs to be skipped
 
 	Find_Actual_Block_Device();
 	if (!Is_Present)
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index d845f74..536e867 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -160,6 +160,8 @@
 		printf("Has_Android_Secure ");
 	if (Part->Is_Storage)
 		printf("Is_Storage ");
+	if (Part->Ignore_Blkid)
+		printf("Ignore_Blkid ");
 	printf("\n");
 	if (!Part->SubPartition_Of.empty())
 		printf("   SubPartition_Of: %s\n", Part->SubPartition_Of.c_str());
diff --git a/partitions.hpp b/partitions.hpp
index a74a5a4..2c3ad71 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -106,6 +106,7 @@
 	string Storage_Path;                                                      // Indicates the path to the storage -- root indicates mount point, media/ indicates e.g. /data/media
 	string Fstab_File_System;                                                 // File system from the recovery.fstab
 	int Format_Block_Size;                                                    // Block size for formatting
+	bool Ignore_Blkid;                                                        // Ignore blkid results due to superblocks lying to us on certain devices / partitions
 
 private:
 	bool Process_Flags(string Flags, bool Display_Error);                     // Process custom fstab flags