]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.c
HII Library Class interface refine.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / HiiDatabase.c
index 7882227fafb10ffbeca9df840f8925fdde425cb9..5a3df71aab52d25e68777d72dbddc08659644495 100644 (file)
@@ -156,7 +156,7 @@ InitializeHiiDatabase (
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  Status = HiiLibListPackageLists (EFI_HII_PACKAGE_STRINGS, NULL, &BufferLength, &Buffer);\r
+  Status = ListPackageLists (EFI_HII_PACKAGE_STRINGS, NULL, &BufferLength, &Buffer);\r
   if (Status == EFI_SUCCESS) {\r
     for (Index = 0; Index < BufferLength / sizeof (EFI_HII_HANDLE); Index++) {\r
       ThunkContext = CreateThunkContextForUefiHiiHandle (Buffer[Index]);\r
@@ -403,7 +403,7 @@ HiiGetPrimaryLanguages (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  LangCodes3066 = HiiLibGetSupportedLanguages (UefiHiiHandle);\r
+  LangCodes3066 = HiiGetSupportedLanguages (UefiHiiHandle);\r
 \r
   if (LangCodes3066 == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -437,6 +437,61 @@ Done:
   return Status;\r
 }\r
 \r
+/**\r
+  This function returns the list of supported 2nd languages, in the format specified\r
+  in UEFI specification Appendix M.\r
+\r
+  If HiiHandle is not a valid Handle in the HII database, then ASSERT.\r
+  If not enough resource to complete the operation, then ASSERT.\r
+\r
+  @param  HiiHandle              The HII package list handle.\r
+  @param  FirstLanguage          Pointer to language name buffer.\r
+  \r
+  @return The supported languages.\r
+\r
+**/\r
+CHAR8 *\r
+EFIAPI\r
+HiiGetSupportedSecondaryLanguages (\r
+  IN EFI_HII_HANDLE           HiiHandle,\r
+  IN CONST CHAR8              *FirstLanguage\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+  UINTN       BufferSize;\r
+  CHAR8       *LanguageString;\r
+\r
+  ASSERT (HiiHandle != NULL);\r
+\r
+  //\r
+  // Collect current supported 2nd Languages for given HII handle\r
+  // First try allocate 4K buffer to store the current supported 2nd languages.\r
+  //\r
+  BufferSize = 0x1000;\r
+  LanguageString = AllocateZeroPool (BufferSize);\r
+  if (LanguageString == NULL) {\r
+    return NULL;\r
+  }\r
+\r
+  Status = mHiiStringProtocol->GetSecondaryLanguages (mHiiStringProtocol, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
+  ASSERT (Status != EFI_NOT_FOUND);\r
+  \r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    FreePool (LanguageString);\r
+    LanguageString = AllocateZeroPool (BufferSize);\r
+    if (LanguageString == NULL) {\r
+      return NULL;\r
+    }\r
+\r
+    Status = mHiiStringProtocol->GetSecondaryLanguages (mHiiStringProtocol, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
+  }\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    LanguageString = NULL;\r
+  }\r
+\r
+  return LanguageString;\r
+}\r
 \r
 /**\r
   Allows a program to determine which secondary languages are supported on a given handle for a given primary language\r
@@ -499,7 +554,7 @@ HiiGetSecondaryLanguages (
   PrimaryLang3066 = ConvertIso639LanguageToRfc3066Language (PrimaryLang639);\r
   ASSERT_EFI_ERROR (PrimaryLang3066 != NULL);\r
 \r
-  SecLangCodes3066 = HiiLibGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang3066);\r
+  SecLangCodes3066 = HiiGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang3066);\r
 \r
   if (SecLangCodes3066 == NULL) {\r
     Status =  EFI_INVALID_PARAMETER;\r