]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/ExtendedIfrSupportLib/Common.c
Enhance HiiGetBrowserData API to support the case that storage element is 0.
[mirror_edk2.git] / MdeModulePkg / Library / ExtendedIfrSupportLib / Common.c
index a5c3f1567b8e4dbb06198d87f39693d12c9f63d5..e9fc4657d49052ef543feee10fdcdf40c62122a9 100644 (file)
@@ -21,7 +21,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 EFI_HII_DATABASE_PROTOCOL *gIfrLibHiiDatabase;\r
 EFI_HII_STRING_PROTOCOL   *gIfrLibHiiString;\r
-GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_GUID mIfrVendorGuid = EFI_IFR_TIANO_GUID;\r
 \r
 /**\r
   ExtendedIfrSupportLib's constructor. It locates the required protocol:\r
@@ -100,14 +99,19 @@ IfrLibExtractClassFromHiiHandle (
   BufferSize = 0;\r
   HiiPackageList = NULL;\r
   Status = gIfrLibHiiDatabase->ExportPackageLists (gIfrLibHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
+  //\r
+  // Handle is a invalid handle. Check if Handle is corrupted.\r
+  //\r
   ASSERT (Status != EFI_NOT_FOUND);\r
+  //\r
+  // The return status should always be EFI_BUFFER_TOO_SMALL as input buffer's size is 0.\r
+  //\r
+  ASSERT (Status == EFI_BUFFER_TOO_SMALL);\r
   \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    HiiPackageList = AllocatePool (BufferSize);\r
-    ASSERT (HiiPackageList != NULL);\r
+  HiiPackageList = AllocatePool (BufferSize);\r
+  ASSERT (HiiPackageList != NULL);\r
 \r
-    Status = gIfrLibHiiDatabase->ExportPackageLists (gIfrLibHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
-  }\r
+  Status = gIfrLibHiiDatabase->ExportPackageLists (gIfrLibHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -117,7 +121,7 @@ IfrLibExtractClassFromHiiHandle (
   //\r
   Offset = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
   Offset2 = 0;\r
-  CopyMem (&PackageListLength, &HiiPackageList->PackageLength, sizeof (UINT32));\r
+  PackageListLength = ReadUnaligned32 (&HiiPackageList->PackageLength);\r
 \r
   while (Offset < PackageListLength) {\r
     Package = ((UINT8 *) HiiPackageList) + Offset;\r
@@ -140,7 +144,7 @@ IfrLibExtractClassFromHiiHandle (
         }\r
 \r
         if ((((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_GUID_OP) &&\r
-             CompareGuid (&mIfrVendorGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER))) &&\r
+             CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER))) &&\r
             (((EFI_IFR_GUID_CLASS *) OpCodeData)->ExtendOpCode == EFI_IFR_EXTEND_OP_CLASS)\r
            ) {\r
           //\r