]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/Database.c
Roll back changes to apply GetBestLanguage() in HiiDataBase. Exact language match...
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / Database.c
index b5a5c43b43c568286eb6152efd6769fba78e2083..918559e54490b4c875dba51e27ff89bad0872646 100644 (file)
@@ -1,4 +1,6 @@
 /** @file\r
+Implementation for EFI_HII_DATABASE_PROTOCOL.\r
+\r
 \r
 Copyright (c) 2007 - 2008, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -9,17 +11,6 @@ http://opensource.org/licenses/bsd-license.php
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-Module Name:\r
-\r
-    Database.c\r
-\r
-Abstract:\r
-\r
-    Implementation for EFI_HII_DATABASE_PROTOCOL.\r
-\r
-Revision History\r
-\r
-\r
 **/\r
 \r
 \r
@@ -28,14 +19,15 @@ Revision History
 //\r
 // Global variables\r
 //\r
-STATIC EFI_GUID mHiiDatabaseNotifyGuid = HII_DATABASE_NOTIFY_GUID;\r
+EFI_GUID mHiiDatabaseNotifyGuid = HII_DATABASE_NOTIFY_GUID;\r
 \r
 \r
 /**\r
   This function generates a HII_DATABASE_RECORD node and adds into hii database.\r
+  This is a internal function.\r
 \r
   @param  Private                hii database private structure\r
-  @param  DatabaseRecord         HII_DATABASE_RECORD node which is used to store a\r
+  @param  DatabaseNode           HII_DATABASE_RECORD node which is used to store a\r
                                  package list\r
 \r
   @retval EFI_SUCCESS            A database record is generated successfully.\r
@@ -44,7 +36,6 @@ STATIC EFI_GUID mHiiDatabaseNotifyGuid = HII_DATABASE_NOTIFY_GUID;
   @retval EFI_INVALID_PARAMETER  Private is NULL or DatabaseRecord is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 GenerateHiiDatabaseRecord (\r
   IN  HII_DATABASE_PRIVATE_DATA *Private,\r
@@ -67,7 +58,7 @@ GenerateHiiDatabaseRecord (
 \r
   DatabaseRecord->PackageList = AllocateZeroPool (sizeof (HII_DATABASE_PACKAGE_LIST_INSTANCE));\r
   if (DatabaseRecord->PackageList == NULL) {\r
-    SafeFreePool (DatabaseRecord);\r
+    FreePool (DatabaseRecord);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
@@ -87,8 +78,8 @@ GenerateHiiDatabaseRecord (
   //\r
   HiiHandle = (HII_HANDLE *) AllocateZeroPool (sizeof (HII_HANDLE));\r
   if (HiiHandle == NULL) {\r
-    SafeFreePool (DatabaseRecord->PackageList);\r
-    SafeFreePool (DatabaseRecord);\r
+    FreePool (DatabaseRecord->PackageList);\r
+    FreePool (DatabaseRecord);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
   HiiHandle->Signature = HII_HANDLE_SIGNATURE;\r
@@ -118,6 +109,7 @@ GenerateHiiDatabaseRecord (
 \r
 /**\r
   This function checks whether a handle is a valid EFI_HII_HANDLE\r
+  This is a internal function.\r
 \r
   @param  Handle                 Pointer to a EFI_HII_HANDLE\r
 \r
@@ -148,6 +140,7 @@ IsHiiHandleValid (
 \r
 /**\r
   This function invokes the matching registered function.\r
+  This is a internal function.\r
 \r
   @param  Private                HII Database driver private structure.\r
   @param  NotifyType             The type of change concerning the database.\r
@@ -162,7 +155,6 @@ IsHiiHandleValid (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InvokeRegisteredFunction (\r
   IN HII_DATABASE_PRIVATE_DATA    *Private,\r
@@ -203,7 +195,7 @@ InvokeRegisteredFunction (
     Package = (EFI_HII_PACKAGE_HEADER *) (((HII_GUID_PACKAGE_INSTANCE *) PackageInstance)->GuidPkg);\r
     break;\r
 \r
-  case EFI_HII_PACKAGE_FORM:\r
+  case EFI_HII_PACKAGE_FORMS:\r
     BufferSize = ((HII_IFR_PACKAGE_INSTANCE *) PackageInstance)->FormPkgHdr.Length;\r
     Buffer = (UINT8 *) AllocateZeroPool (BufferSize);\r
     ASSERT (Buffer != NULL);\r
@@ -348,8 +340,9 @@ InvokeRegisteredFunction (
     }\r
   }\r
 \r
-  SafeFreePool (Buffer);\r
-  Buffer = NULL;\r
+  if (Buffer != NULL) {\r
+    FreePool (Buffer);\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -357,6 +350,7 @@ InvokeRegisteredFunction (
 \r
 /**\r
   This function insert a GUID package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  PackageHdr             Pointer to a buffer stored with GUID package\r
                                  information.\r
@@ -371,7 +365,6 @@ InvokeRegisteredFunction (
   @retval EFI_INVALID_PARAMETER  PackageHdr is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertGuidPackage (\r
   IN     VOID                               *PackageHdr,\r
@@ -398,7 +391,7 @@ InsertGuidPackage (
   }\r
   GuidPackage->GuidPkg = (UINT8 *) AllocateZeroPool (PackageHeader.Length);\r
   if (GuidPackage->GuidPkg == NULL) {\r
-    SafeFreePool (GuidPackage);\r
+    FreePool (GuidPackage);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
@@ -417,6 +410,7 @@ InsertGuidPackage (
 \r
 /**\r
   This function exports GUID packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -431,7 +425,6 @@ InsertGuidPackage (
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportGuidPackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -485,6 +478,7 @@ ExportGuidPackages (
 \r
 /**\r
   This function deletes all GUID packages from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -496,7 +490,6 @@ ExportGuidPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveGuidPackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -532,8 +525,8 @@ RemoveGuidPackages (
     RemoveEntryList (&Package->GuidEntry);\r
     CopyMem (&PackageHeader, Package->GuidPkg, sizeof (EFI_HII_PACKAGE_HEADER));\r
     PackageList->PackageListHdr.PackageLength -= PackageHeader.Length;\r
-    SafeFreePool (Package->GuidPkg);\r
-    SafeFreePool (Package);\r
+    FreePool (Package->GuidPkg);\r
+    FreePool (Package);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -542,6 +535,7 @@ RemoveGuidPackages (
 \r
 /**\r
   This function insert a Form package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  PackageHdr             Pointer to a buffer stored with Form package\r
                                  information.\r
@@ -556,7 +550,6 @@ RemoveGuidPackages (
   @retval EFI_INVALID_PARAMETER  PackageHdr is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertFormPackage (\r
   IN     VOID                               *PackageHdr,\r
@@ -587,7 +580,7 @@ InsertFormPackage (
 \r
   FormPackage->IfrData = (UINT8 *) AllocateZeroPool (PackageHeader.Length - sizeof (EFI_HII_PACKAGE_HEADER));\r
   if (FormPackage->IfrData == NULL) {\r
-    SafeFreePool (FormPackage);\r
+    FreePool (FormPackage);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
@@ -618,6 +611,7 @@ InsertFormPackage (
 \r
 /**\r
   This function exports Form packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -632,7 +626,6 @@ InsertFormPackage (
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportFormPackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -666,7 +659,7 @@ ExportFormPackages (
   for (Link = PackageList->FormPkgHdr.ForwardLink; Link != &PackageList->FormPkgHdr; Link = Link->ForwardLink) {\r
     FormPackage = CR (Link, HII_IFR_PACKAGE_INSTANCE, IfrEntry, HII_IFR_PACKAGE_SIGNATURE);\r
     PackageLength += FormPackage->FormPkgHdr.Length;\r
-    if (PackageLength + *ResultSize + UsedSize <= BufferSize) {\r
+    if ((Buffer != NULL) && (PackageLength + *ResultSize + UsedSize <= BufferSize)) {\r
       //\r
       // Invoke registered notification if exists\r
       //\r
@@ -674,7 +667,7 @@ ExportFormPackages (
                  Private,\r
                  EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,\r
                  (VOID *) FormPackage,\r
-                 EFI_HII_PACKAGE_FORM,\r
+                 EFI_HII_PACKAGE_FORMS,\r
                  Handle\r
                  );\r
       ASSERT_EFI_ERROR (Status);\r
@@ -701,6 +694,7 @@ ExportFormPackages (
 \r
 /**\r
   This function deletes all Form packages from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -712,7 +706,6 @@ ExportFormPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveFormPackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -737,7 +730,7 @@ RemoveFormPackages (
                Private,\r
                EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,\r
                (VOID *) Package,\r
-               EFI_HII_PACKAGE_FORM,\r
+               EFI_HII_PACKAGE_FORMS,\r
                Handle\r
                );\r
     if (EFI_ERROR (Status)) {\r
@@ -746,8 +739,8 @@ RemoveFormPackages (
 \r
     RemoveEntryList (&Package->IfrEntry);\r
     PackageList->PackageListHdr.PackageLength -= Package->FormPkgHdr.Length;\r
-    SafeFreePool (Package->IfrData);\r
-    SafeFreePool (Package);\r
+    FreePool (Package->IfrData);\r
+    FreePool (Package);\r
 \r
   }\r
 \r
@@ -758,6 +751,7 @@ RemoveFormPackages (
 \r
 /**\r
   This function insert a String package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  PackageHdr             Pointer to a buffer stored with String package\r
@@ -775,7 +769,6 @@ RemoveFormPackages (
                                  exists in current package list.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertStringPackage (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -816,12 +809,12 @@ InsertStringPackage (
   AsciiStrCpy (Language, (CHAR8 *) PackageHdr + HeaderSize - LanguageSize);\r
   for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) {\r
     StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
-    if (R8_EfiLibCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) {\r
-      SafeFreePool (Language);\r
+    if (HiiCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) {\r
+      FreePool (Language);\r
       return EFI_UNSUPPORTED;\r
     }\r
   }\r
-  SafeFreePool (Language);\r
+  FreePool (Language);\r
 \r
   //\r
   // Create a String package node\r
@@ -884,9 +877,15 @@ InsertStringPackage (
 \r
 Error:\r
 \r
-  SafeFreePool (StringPackage->StringBlock);\r
-  SafeFreePool (StringPackage->StringPkgHdr);\r
-  SafeFreePool (StringPackage);\r
+  if (StringPackage != NULL) {\r
+    if (StringPackage->StringBlock != NULL) {\r
+      FreePool (StringPackage->StringBlock);\r
+    }\r
+    if (StringPackage->StringPkgHdr != NULL) {\r
+      FreePool (StringPackage->StringPkgHdr);\r
+    }\r
+    FreePool (StringPackage);\r
+  }\r
   return Status;\r
 \r
 }\r
@@ -894,6 +893,7 @@ Error:
 \r
 /**\r
   This function exports String packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -908,7 +908,6 @@ Error:
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportStringPackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -976,6 +975,7 @@ ExportStringPackages (
 \r
 /**\r
   This function deletes all String packages from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -987,7 +987,6 @@ ExportStringPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveStringPackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1022,8 +1021,8 @@ RemoveStringPackages (
 \r
     RemoveEntryList (&Package->StringEntry);\r
     PackageList->PackageListHdr.PackageLength -= Package->StringPkgHdr->Header.Length;\r
-    SafeFreePool (Package->StringBlock);\r
-    SafeFreePool (Package->StringPkgHdr);\r
+    FreePool (Package->StringBlock);\r
+    FreePool (Package->StringPkgHdr);\r
     //\r
     // Delete font information\r
     //\r
@@ -1035,10 +1034,10 @@ RemoveStringPackages (
                    HII_FONT_INFO_SIGNATURE\r
                    );\r
       RemoveEntryList (&FontInfo->Entry);\r
-      SafeFreePool (FontInfo);\r
+      FreePool (FontInfo);\r
     }\r
 \r
-    SafeFreePool (Package);\r
+    FreePool (Package);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -1047,6 +1046,7 @@ RemoveStringPackages (
 \r
 /**\r
   This function insert a Font package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  PackageHdr             Pointer to a buffer stored with Font package\r
@@ -1064,7 +1064,6 @@ RemoveStringPackages (
                                  exists in current hii database.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertFontPackage (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1177,11 +1176,21 @@ InsertFontPackage (
 \r
 Error:\r
 \r
-  SafeFreePool (FontPkgHdr);\r
-  SafeFreePool (FontInfo);\r
-  SafeFreePool (FontPackage->GlyphBlock);\r
-  SafeFreePool (FontPackage);\r
-  SafeFreePool (GlobalFont);\r
+  if (FontPkgHdr != NULL) {\r
+    FreePool (FontPkgHdr);\r
+  }\r
+  if (FontInfo != NULL) {\r
+    FreePool (FontInfo);\r
+  }\r
+  if (FontPackage != NULL) {\r
+    if (FontPackage->GlyphBlock != NULL) {\r
+      FreePool (FontPackage->GlyphBlock);\r
+    }\r
+    FreePool (FontPackage);\r
+  }\r
+  if (GlobalFont != NULL) {\r
+    FreePool (GlobalFont);\r
+  }\r
 \r
   return Status;\r
 \r
@@ -1190,6 +1199,7 @@ Error:
 \r
 /**\r
   This function exports Font packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -1204,7 +1214,6 @@ Error:
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportFontPackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1273,6 +1282,7 @@ ExportFontPackages (
 \r
 /**\r
   This function deletes all Font packages from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -1284,7 +1294,6 @@ ExportFontPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveFontPackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1321,8 +1330,11 @@ RemoveFontPackages (
 \r
     RemoveEntryList (&Package->FontEntry);\r
     PackageList->PackageListHdr.PackageLength -= Package->FontPkgHdr->Header.Length;\r
-    SafeFreePool (Package->GlyphBlock);\r
-    SafeFreePool (Package->FontPkgHdr);\r
+\r
+    if (Package->GlyphBlock != NULL) {\r
+      FreePool (Package->GlyphBlock);\r
+    }\r
+    FreePool (Package->FontPkgHdr);\r
     //\r
     // Delete default character cell information\r
     //\r
@@ -1334,7 +1346,7 @@ RemoveFontPackages (
                     HII_GLYPH_INFO_SIGNATURE\r
                     );\r
       RemoveEntryList (&GlyphInfo->Entry);\r
-      SafeFreePool (GlyphInfo);\r
+      FreePool (GlyphInfo);\r
     }\r
 \r
     //\r
@@ -1344,13 +1356,13 @@ RemoveFontPackages (
       GlobalFont = CR (Link, HII_GLOBAL_FONT_INFO, Entry, HII_GLOBAL_FONT_INFO_SIGNATURE);\r
       if (GlobalFont->FontPackage == Package) {\r
         RemoveEntryList (&GlobalFont->Entry);\r
-        SafeFreePool (GlobalFont->FontInfo);\r
-        SafeFreePool (GlobalFont);\r
+        FreePool (GlobalFont->FontInfo);\r
+        FreePool (GlobalFont);\r
         break;\r
       }\r
     }\r
 \r
-    SafeFreePool (Package);\r
+    FreePool (Package);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -1359,6 +1371,7 @@ RemoveFontPackages (
 \r
 /**\r
   This function insert a Image package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  PackageHdr             Pointer to a buffer stored with Image package\r
                                  information.\r
@@ -1373,7 +1386,6 @@ RemoveFontPackages (
   @retval EFI_INVALID_PARAMETER  PackageHdr is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertImagePackage (\r
   IN     VOID                               *PackageHdr,\r
@@ -1438,7 +1450,7 @@ InsertImagePackage (
 \r
     ImagePackage->PaletteBlock = (UINT8 *) AllocateZeroPool (PaletteSize);\r
     if (ImagePackage->PaletteBlock == NULL) {\r
-      SafeFreePool (ImagePackage);\r
+      FreePool (ImagePackage);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     CopyMem (\r
@@ -1458,8 +1470,8 @@ InsertImagePackage (
                 sizeof (EFI_HII_IMAGE_PACKAGE_HDR) - PaletteSize;\r
     ImagePackage->ImageBlock = (UINT8 *) AllocateZeroPool (ImageSize);\r
     if (ImagePackage->ImageBlock == NULL) {\r
-      SafeFreePool (ImagePackage->PaletteBlock);\r
-      SafeFreePool (ImagePackage);\r
+      FreePool (ImagePackage->PaletteBlock);\r
+      FreePool (ImagePackage);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
     CopyMem (\r
@@ -1484,6 +1496,7 @@ InsertImagePackage (
 \r
 /**\r
   This function exports Image packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -1498,7 +1511,6 @@ InsertImagePackage (
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportImagePackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1575,6 +1587,7 @@ ExportImagePackages (
 \r
 /**\r
   This function deletes Image package from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -1586,7 +1599,6 @@ ExportImagePackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveImagePackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1619,9 +1631,11 @@ RemoveImagePackages (
 \r
   PackageList->PackageListHdr.PackageLength -= Package->ImagePkgHdr.Header.Length;\r
 \r
-  SafeFreePool (Package->ImageBlock);\r
-  SafeFreePool (Package->PaletteBlock);\r
-  SafeFreePool (Package);\r
+  FreePool (Package->ImageBlock);\r
+  if (Package->PaletteBlock != NULL) {\r
+    FreePool (Package->PaletteBlock);\r
+  }\r
+  FreePool (Package);\r
 \r
   PackageList->ImagePkg = NULL;\r
 \r
@@ -1631,6 +1645,7 @@ RemoveImagePackages (
 \r
 /**\r
   This function insert a Simple Font package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  PackageHdr             Pointer to a buffer stored with Simple Font\r
                                  package information.\r
@@ -1645,7 +1660,6 @@ RemoveImagePackages (
   @retval EFI_INVALID_PARAMETER  PackageHdr is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertSimpleFontPackage (\r
   IN     VOID                               *PackageHdr,\r
@@ -1699,14 +1713,19 @@ InsertSimpleFontPackage (
 \r
 Error:\r
 \r
-  SafeFreePool (SimpleFontPackage->SimpleFontPkgHdr);\r
-  SafeFreePool (SimpleFontPackage);\r
+  if (SimpleFontPackage != NULL) {\r
+    if (SimpleFontPackage->SimpleFontPkgHdr != NULL) {\r
+      FreePool (SimpleFontPackage->SimpleFontPkgHdr);\r
+    }\r
+    FreePool (SimpleFontPackage);\r
+  }\r
   return Status;\r
 }\r
 \r
 \r
 /**\r
   This function exports SimpleFont packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -1721,7 +1740,6 @@ Error:
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportSimpleFontPackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1780,6 +1798,7 @@ ExportSimpleFontPackages (
 \r
 /**\r
   This function deletes all Simple Font packages from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -1791,7 +1810,6 @@ ExportSimpleFontPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveSimpleFontPackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1825,8 +1843,8 @@ RemoveSimpleFontPackages (
 \r
     RemoveEntryList (&Package->SimpleFontEntry);\r
     PackageList->PackageListHdr.PackageLength -= Package->SimpleFontPkgHdr->Header.Length;\r
-    SafeFreePool (Package->SimpleFontPkgHdr);\r
-    SafeFreePool (Package);\r
+    FreePool (Package->SimpleFontPkgHdr);\r
+    FreePool (Package);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -1835,6 +1853,7 @@ RemoveSimpleFontPackages (
 \r
 /**\r
   This function insert a Device path package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  DevicePath             Pointer to a EFI_DEVICE_PATH_PROTOCOL protocol\r
                                  instance\r
@@ -1848,7 +1867,6 @@ RemoveSimpleFontPackages (
   @retval EFI_INVALID_PARAMETER  DevicePath is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertDevicePathPackage (\r
   IN     EFI_DEVICE_PATH_PROTOCOL           *DevicePath,\r
@@ -1895,6 +1913,7 @@ InsertDevicePathPackage (
 \r
 /**\r
   This function exports device path package to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -1909,7 +1928,6 @@ InsertDevicePathPackage (
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportDevicePathPackage (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -1966,6 +1984,7 @@ ExportDevicePathPackage (
 \r
 /**\r
   This function deletes Device Path package from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list.\r
@@ -1976,7 +1995,6 @@ ExportDevicePathPackage (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveDevicePathPackage (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -2011,7 +2029,7 @@ RemoveDevicePathPackage (
   CopyMem (&Header, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
   PackageList->PackageListHdr.PackageLength -= Header.Length;\r
 \r
-  SafeFreePool (Package);\r
+  FreePool (Package);\r
 \r
   PackageList->DevicePathPkg = NULL;\r
 \r
@@ -2022,6 +2040,7 @@ RemoveDevicePathPackage (
 /**\r
   This function will insert a device path package to package list firstly then\r
   invoke notification functions if any.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  NotifyType             The type of change concerning the database.\r
@@ -2036,7 +2055,6 @@ RemoveDevicePathPackage (
   @retval EFI_INVALID_PARAMETER  DevicePath is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 AddDevicePathPackage (\r
   IN HII_DATABASE_PRIVATE_DATA        *Private,\r
@@ -2078,6 +2096,7 @@ AddDevicePathPackage (
 \r
 /**\r
   This function insert a Keyboard Layout package to a package list node.\r
+  This is a internal function.\r
 \r
   @param  PackageHdr             Pointer to a buffer stored with Keyboard Layout\r
                                  package information.\r
@@ -2092,7 +2111,6 @@ AddDevicePathPackage (
   @retval EFI_INVALID_PARAMETER  PackageHdr is NULL or PackageList is NULL.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 InsertKeyboardLayoutPackage (\r
   IN     VOID                               *PackageHdr,\r
@@ -2140,8 +2158,13 @@ InsertKeyboardLayoutPackage (
 \r
 Error:\r
 \r
-  SafeFreePool (KeyboardLayoutPackage->KeyboardPkg);\r
-  SafeFreePool (KeyboardLayoutPackage);\r
+\r
+  if (KeyboardLayoutPackage != NULL) {\r
+    if (KeyboardLayoutPackage->KeyboardPkg != NULL) {\r
+      FreePool (KeyboardLayoutPackage->KeyboardPkg);\r
+    }\r
+    FreePool (KeyboardLayoutPackage);\r
+  }\r
 \r
   return Status;\r
 }\r
@@ -2149,6 +2172,7 @@ Error:
 \r
 /**\r
   This function exports Keyboard Layout packages to a buffer.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
@@ -2164,7 +2188,6 @@ Error:
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportKeyboardLayoutPackages (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -2225,6 +2248,7 @@ ExportKeyboardLayoutPackages (
 \r
 /**\r
   This function deletes all Keyboard Layout packages from a package list node.\r
+  This is a internal function.\r
 \r
   @param  Private                Hii database private data.\r
   @param  Handle                 Handle of the package list which contains the to\r
@@ -2237,7 +2261,6 @@ ExportKeyboardLayoutPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is not valid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 RemoveKeyboardLayoutPackages (\r
   IN     HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -2273,8 +2296,8 @@ RemoveKeyboardLayoutPackages (
     RemoveEntryList (&Package->KeyboardEntry);\r
     CopyMem (&PackageHeader, Package->KeyboardPkg, sizeof (EFI_HII_PACKAGE_HEADER));\r
     PackageList->PackageListHdr.PackageLength -= PackageHeader.Length;\r
-    SafeFreePool (Package->KeyboardPkg);\r
-    SafeFreePool (Package);\r
+    FreePool (Package->KeyboardPkg);\r
+    FreePool (Package);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -2286,6 +2309,8 @@ RemoveKeyboardLayoutPackages (
   invoke notification functions if any. It is the worker function of\r
   HiiNewPackageList and HiiUpdatePackageList.\r
 \r
+  This is a internal function.\r
+\r
   @param  Private                Hii database private structure.\r
   @param  NotifyType             The type of change concerning the database.\r
   @param  PackageList            Pointer to a package list.\r
@@ -2299,7 +2324,6 @@ RemoveKeyboardLayoutPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 AddPackages (\r
   IN HII_DATABASE_PRIVATE_DATA         *Private,\r
@@ -2363,7 +2387,7 @@ AddPackages (
                  DatabaseRecord->Handle\r
                  );\r
       break;\r
-    case EFI_HII_PACKAGE_FORM:\r
+    case EFI_HII_PACKAGE_FORMS:\r
       Status = InsertFormPackage (\r
                  PackageHdrPtr,\r
                  NotifyType,\r
@@ -2503,6 +2527,8 @@ AddPackages (
   This function exports a package list to a buffer. It is the worker function\r
   of HiiExportPackageList.\r
 \r
+  This is a internal function.\r
+\r
   @param  Private                Hii database private structure.\r
   @param  Handle                 Identification of a package list.\r
   @param  PackageList            Pointer to a package list which will be exported.\r
@@ -2516,7 +2542,6 @@ AddPackages (
   @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 ExportPackageList (\r
   IN HII_DATABASE_PRIVATE_DATA          *Private,\r
@@ -2531,7 +2556,7 @@ ExportPackageList (
   UINTN                               ResultSize;\r
   EFI_HII_PACKAGE_HEADER              EndofPackageList;\r
 \r
-  ASSERT (Private != NULL || PackageList != NULL || UsedSize != NULL);\r
+  ASSERT (Private != NULL && PackageList != NULL && UsedSize != NULL);\r
   ASSERT (Private->Signature == HII_DATABASE_PRIVATE_DATA_SIGNATURE);\r
   ASSERT (IsHiiHandleValid (Handle));\r
 \r
@@ -2856,9 +2881,9 @@ HiiRemovePackageList (
       ASSERT (Private->HiiHandleCount >= 0);\r
 \r
       HiiHandle->Signature = 0;\r
-      SafeFreePool (HiiHandle);\r
-      SafeFreePool (Node->PackageList);\r
-      SafeFreePool (Node);\r
+      FreePool (HiiHandle);\r
+      FreePool (Node->PackageList);\r
+      FreePool (Node);\r
 \r
       return EFI_SUCCESS;\r
     }\r
@@ -2933,7 +2958,7 @@ HiiUpdatePackageList (
         case EFI_HII_PACKAGE_TYPE_GUID:\r
           Status = RemoveGuidPackages (Private, Handle, OldPackageList);\r
           break;\r
-        case EFI_HII_PACKAGE_FORM:\r
+        case EFI_HII_PACKAGE_FORMS:\r
           Status = RemoveFormPackages (Private, Handle, OldPackageList);\r
           break;\r
         case EFI_HII_PACKAGE_KEYBOARD_LAYOUT:\r
@@ -3063,7 +3088,7 @@ HiiListPackageLists (
           }\r
         }\r
         break;\r
-      case EFI_HII_PACKAGE_FORM:\r
+      case EFI_HII_PACKAGE_FORMS:\r
         if (!IsListEmpty (&PackageList->FormPkgHdr)) {\r
           Matched = TRUE;\r
         }\r
@@ -3204,8 +3229,7 @@ HiiExportPackageLists (
                  (EFI_HII_PACKAGE_LIST_HEADER *)((UINT8 *) Buffer + UsedSize)\r
                  );\r
       ASSERT_EFI_ERROR (Status);\r
-    }\r
-    else if (Handle != NULL && Node->Handle == Handle) {\r
+    } else if (Handle != NULL && Node->Handle == Handle) {\r
       Status = ExportPackageList (\r
                  Private,\r
                  Handle,\r
@@ -3336,7 +3360,7 @@ HiiRegisterPackageNotify (
 \r
   @param  This                   A pointer to the EFI_HII_DATABASE_PROTOCOL\r
                                  instance.\r
-  @param  NotifyHandle           The handle of the notification function being\r
+  @param  NotificationHandle     The handle of the notification function being\r
                                  unregistered.\r
 \r
   @retval EFI_SUCCESS            Notification is unregistered successfully.\r
@@ -3393,8 +3417,7 @@ HiiUnregisterPackageNotify (
                       NULL\r
                       );\r
       ASSERT_EFI_ERROR (Status);\r
-      SafeFreePool (Notify);\r
-      Notify = NULL;\r
+      FreePool (Notify);\r
 \r
       return EFI_SUCCESS;\r
     }\r
@@ -3676,7 +3699,9 @@ HiiSetKeyboardLayout (
   // Backup current keyboard layout.\r
   //\r
   CopyMem (&Private->CurrentLayoutGuid, KeyGuid, sizeof (EFI_GUID));\r
-  SafeFreePool(Private->CurrentLayout);\r
+  if (Private->CurrentLayout != NULL) {\r
+    FreePool(Private->CurrentLayout);\r
+  }\r
   Private->CurrentLayout = KeyboardLayout;\r
 \r
   //\r