]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Use PartitionHeader->SizeOfPartitionEntry instead of sizeof (EFI_PARTITION_ENTRY).
authorniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 9 May 2012 05:21:43 +0000 (05:21 +0000)
committerniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 9 May 2012 05:21:43 +0000 (05:21 +0000)
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13296 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c

index d80f959cdbfd273add2a5b3494287f22a70e9eb3..6caec01a6cef0043eacee5a478799378de44b791 100644 (file)
@@ -187,6 +187,7 @@ PartitionInstallGptChildHandles (
   EFI_PARTITION_TABLE_HEADER  *PrimaryHeader;\r
   EFI_PARTITION_TABLE_HEADER  *BackupHeader;\r
   EFI_PARTITION_ENTRY         *PartEntry;\r
+  EFI_PARTITION_ENTRY         *Entry;\r
   EFI_PARTITION_ENTRY_STATUS  *PEntryStatus;\r
   UINTN                       Index;\r
   EFI_STATUS                  GptValidStatus;\r
@@ -297,7 +298,7 @@ PartitionInstallGptChildHandles (
   //\r
   // Read the EFI Partition Entries\r
   //\r
-  PartEntry = AllocatePool (PrimaryHeader->NumberOfPartitionEntries * sizeof (EFI_PARTITION_ENTRY));\r
+  PartEntry = AllocatePool (PrimaryHeader->NumberOfPartitionEntries * PrimaryHeader->SizeOfPartitionEntry);\r
   if (PartEntry == NULL) {\r
     DEBUG ((EFI_D_ERROR, "Allocate pool error\n"));\r
     goto Done;\r
@@ -340,7 +341,8 @@ PartitionInstallGptChildHandles (
   // Create child device handles\r
   //\r
   for (Index = 0; Index < PrimaryHeader->NumberOfPartitionEntries; Index++) {\r
-    if (CompareGuid (&PartEntry[Index].PartitionTypeGUID, &gEfiPartTypeUnusedGuid) ||\r
+    Entry = (EFI_PARTITION_ENTRY *) ((UINT8 *) PartEntry + Index * PrimaryHeader->SizeOfPartitionEntry);\r
+    if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeUnusedGuid) ||\r
         PEntryStatus[Index].OutOfRange ||\r
         PEntryStatus[Index].Overlap ||\r
         PEntryStatus[Index].OsSpecific\r
@@ -360,16 +362,16 @@ PartitionInstallGptChildHandles (
     HdDev.PartitionNumber = (UINT32) Index + 1;\r
     HdDev.MBRType         = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;\r
     HdDev.SignatureType   = SIGNATURE_TYPE_GUID;\r
-    HdDev.PartitionStart  = PartEntry[Index].StartingLBA;\r
-    HdDev.PartitionSize   = PartEntry[Index].EndingLBA - PartEntry[Index].StartingLBA + 1;\r
-    CopyMem (HdDev.Signature, &PartEntry[Index].UniquePartitionGUID, sizeof (EFI_GUID));\r
+    HdDev.PartitionStart  = Entry->StartingLBA;\r
+    HdDev.PartitionSize   = Entry->EndingLBA - Entry->StartingLBA + 1;\r
+    CopyMem (HdDev.Signature, &Entry->UniquePartitionGUID, sizeof (EFI_GUID));\r
 \r
     DEBUG ((EFI_D_INFO, " Index : %d\n", (UINT32) Index));\r
     DEBUG ((EFI_D_INFO, " Start LBA : %lx\n", (UINT64) HdDev.PartitionStart));\r
-    DEBUG ((EFI_D_INFO, " End LBA : %lx\n", (UINT64) PartEntry[Index].EndingLBA));\r
+    DEBUG ((EFI_D_INFO, " End LBA : %lx\n", (UINT64) Entry->EndingLBA));\r
     DEBUG ((EFI_D_INFO, " Partition size: %lx\n", (UINT64) HdDev.PartitionSize));\r
-    DEBUG ((EFI_D_INFO, " Start : %lx", MultU64x32 (PartEntry[Index].StartingLBA, BlockSize)));\r
-    DEBUG ((EFI_D_INFO, " End : %lx\n", MultU64x32 (PartEntry[Index].EndingLBA, BlockSize)));\r
+    DEBUG ((EFI_D_INFO, " Start : %lx", MultU64x32 (Entry->StartingLBA, BlockSize)));\r
+    DEBUG ((EFI_D_INFO, " End : %lx\n", MultU64x32 (Entry->EndingLBA, BlockSize)));\r
 \r
     Status = PartitionInstallChildHandle (\r
                This,\r
@@ -379,10 +381,10 @@ PartitionInstallGptChildHandles (
                BlockIo2,\r
                DevicePath,\r
                (EFI_DEVICE_PATH_PROTOCOL *) &HdDev,\r
-               PartEntry[Index].StartingLBA,\r
-               PartEntry[Index].EndingLBA,\r
+               Entry->StartingLBA,\r
+               Entry->EndingLBA,\r
                BlockSize,\r
-               CompareGuid(&PartEntry[Index].PartitionTypeGUID, &gEfiPartTypeSystemPartGuid)\r
+               CompareGuid(&Entry->PartitionTypeGUID, &gEfiPartTypeSystemPartGuid)\r
                );\r
   }\r
 \r
@@ -637,7 +639,6 @@ Done:
   return TRUE;\r
 }\r
 \r
-\r
 /**\r
   Restore Partition Table to its alternate place.\r
   (Primary -> Backup or Backup -> Primary)\r
@@ -655,20 +656,21 @@ PartitionCheckGptEntry (
   OUT EFI_PARTITION_ENTRY_STATUS  *PEntryStatus\r
   )\r
 {\r
-  EFI_LBA StartingLBA;\r
-  EFI_LBA EndingLBA;\r
-  UINTN   Index1;\r
-  UINTN   Index2;\r
-  UINT64  Attributes;\r
+  EFI_LBA              StartingLBA;\r
+  EFI_LBA              EndingLBA;\r
+  EFI_PARTITION_ENTRY  *Entry;\r
+  UINTN                Index1;\r
+  UINTN                Index2;\r
 \r
   DEBUG ((EFI_D_INFO, " start check partition entries\n"));\r
   for (Index1 = 0; Index1 < PartHeader->NumberOfPartitionEntries; Index1++) {\r
-    if (CompareGuid (&PartEntry[Index1].PartitionTypeGUID, &gEfiPartTypeUnusedGuid)) {\r
+    Entry = (EFI_PARTITION_ENTRY *) ((UINT8 *) PartEntry + Index1 * PartHeader->SizeOfPartitionEntry);\r
+    if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeUnusedGuid)) {\r
       continue;\r
     }\r
 \r
-    StartingLBA = PartEntry[Index1].StartingLBA;\r
-    EndingLBA   = PartEntry[Index1].EndingLBA;\r
+    StartingLBA = Entry->StartingLBA;\r
+    EndingLBA   = Entry->EndingLBA;\r
     if (StartingLBA > EndingLBA ||\r
         StartingLBA < PartHeader->FirstUsableLBA ||\r
         StartingLBA > PartHeader->LastUsableLBA ||\r
@@ -679,30 +681,28 @@ PartitionCheckGptEntry (
       continue;\r
     }\r
 \r
-    for (Index2 = Index1 + 1; Index2 < PartHeader->NumberOfPartitionEntries; Index2++) {\r
+    if ((Entry->Attributes & BIT1) != 0) {\r
+      //\r
+      // If Bit 1 is set, this indicate that this is an OS specific GUID partition. \r
+      //\r
+      PEntryStatus[Index1].OsSpecific = TRUE;\r
+    }\r
 \r
-      if (CompareGuid (&PartEntry[Index2].PartitionTypeGUID, &gEfiPartTypeUnusedGuid)) {\r
+    for (Index2 = Index1 + 1; Index2 < PartHeader->NumberOfPartitionEntries; Index2++) {\r
+      Entry = (EFI_PARTITION_ENTRY *) ((UINT8 *) PartEntry + Index2 * PartHeader->SizeOfPartitionEntry);\r
+      if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeUnusedGuid)) {\r
         continue;\r
       }\r
 \r
-      if (PartEntry[Index2].EndingLBA >= StartingLBA && PartEntry[Index2].StartingLBA <= EndingLBA) {\r
+      if (Entry->EndingLBA >= StartingLBA && Entry->StartingLBA <= EndingLBA) {\r
         //\r
         // This region overlaps with the Index1'th region\r
         //\r
         PEntryStatus[Index1].Overlap  = TRUE;\r
         PEntryStatus[Index2].Overlap  = TRUE;\r
         continue;\r
-\r
       }\r
     }\r
-\r
-    Attributes = PartEntry[Index1].Attributes;\r
-    if ((Attributes & BIT1) != 0) {\r
-      //\r
-      // If Bit 1 is set, this indicate that this is an OS specific GUID partition. \r
-      //\r
-      PEntryStatus[Index1].OsSpecific = TRUE;\r
-    }\r
   }\r
 \r
   DEBUG ((EFI_D_INFO, " End check partition entries\n"));\r