HiiNewString,\r
HiiGetPrimaryLanguages,\r
HiiGetSecondaryLanguages,\r
- HiiGetString,\r
+ HiiThunkGetString,\r
HiiResetStrings,\r
HiiGetLine,\r
HiiGetForms,\r
HiiGetDefaultImage,\r
- HiiUpdateForm,\r
+ HiiThunkUpdateForm,\r
\r
HiiGetKeyboardLayout\r
},\r
);\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
return EFI_SUCCESS;\r
}\r
\r
-EFI_STATUS\r
-LangCodes3066To639 (\r
- IN CHAR8 *LangCodes3066,\r
- IN CHAR8 **LangCodes639\r
- )\r
-{\r
- CHAR8 *AsciiLangCodes;\r
- CHAR8 *Lang;\r
- UINTN Index;\r
- UINTN Count;\r
- EFI_STATUS Status;\r
-\r
- ASSERT (LangCodes3066 != NULL);\r
- ASSERT (LangCodes639 != NULL);\r
- \r
- //\r
- // Allocate working buffer to contain substring of LangCodes3066.\r
- //\r
- Lang = AllocatePool (AsciiStrSize (LangCodes3066));\r
- if (Lang != NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
-\r
- //\r
- // Count the number of RFC 3066 language codes.\r
- //\r
- Index = 0;\r
- AsciiLangCodes = LangCodes3066;\r
- while (AsciiStrLen (AsciiLangCodes) != 0) {\r
- HiiLibGetNextLanguage (&AsciiLangCodes, Lang);\r
- Index++;\r
- }\r
-\r
- Count = Index;\r
-\r
- //\r
- // \r
- //\r
- *LangCodes639 = AllocateZeroPool (ISO_639_2_ENTRY_SIZE * Count + 1);\r
- if (*LangCodes639 == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES;\r
- goto Done;\r
- }\r
-\r
- AsciiLangCodes = LangCodes3066;\r
-\r
- for (Index = 0; Index < Count; Index++) {\r
- HiiLibGetNextLanguage (&AsciiLangCodes, Lang);\r
- Status = ConvertRfc3066LanguageToIso639Language (Lang, *LangCodes639 + Index * ISO_639_2_ENTRY_SIZE);\r
- ASSERT_EFI_ERROR (Status);\r
- }\r
-\r
- Status = EFI_SUCCESS;\r
-\r
-Done:\r
- FreePool (Lang);\r
- return Status;\r
-}\r
-\r
/**\r
Allows a program to determine the primary languages that are supported on a given handle.\r
\r
{\r
HII_THUNK_PRIVATE_DATA *Private;\r
EFI_HII_HANDLE UefiHiiHandle;\r
- CHAR8 *LangCodes3066;\r
+ CHAR8 *LangCodes4646;\r
CHAR16 *UnicodeLangCodes639;\r
CHAR8 *LangCodes639;\r
EFI_STATUS Status;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- LangCodes3066 = HiiLibGetSupportedLanguages (UefiHiiHandle);\r
+ LangCodes4646 = HiiGetSupportedLanguages (UefiHiiHandle);\r
\r
- if (LangCodes3066 == NULL) {\r
+ if (LangCodes4646 == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
-\r
- LangCodes639 = NULL;\r
- Status = LangCodes3066To639 (LangCodes3066, &LangCodes639);\r
- if (EFI_ERROR (Status)) {\r
+ LangCodes639 = ConvertLanguagesRfc4646ToIso639 (LangCodes4646);\r
+ if (LangCodes639 == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
goto Done;\r
}\r
\r
//\r
AsciiStrToUnicodeStr (LangCodes639, UnicodeLangCodes639);\r
*LanguageString = UnicodeLangCodes639;\r
+ Status = EFI_SUCCESS;\r
\r
Done:\r
- FreePool (LangCodes3066);\r
+ FreePool (LangCodes4646);\r
if (LangCodes639 != NULL) {\r
FreePool (LangCodes639);\r
}\r
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
{\r
HII_THUNK_PRIVATE_DATA *Private;\r
EFI_HII_HANDLE UefiHiiHandle;\r
- CHAR8 *PrimaryLang3066;\r
+ CHAR8 *PrimaryLang4646;\r
CHAR8 *PrimaryLang639;\r
- CHAR8 *SecLangCodes3066;\r
+ CHAR8 *SecLangCodes4646;\r
CHAR8 *SecLangCodes639;\r
CHAR16 *UnicodeSecLangCodes639;\r
EFI_STATUS Status;\r
Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
SecLangCodes639 = NULL;\r
- SecLangCodes3066 = NULL;\r
- PrimaryLang3066 = NULL;\r
+ SecLangCodes4646 = NULL;\r
+ PrimaryLang4646 = NULL;\r
UnicodeSecLangCodes639 = NULL;\r
\r
UefiHiiHandle = FwHiiHandleToUefiHiiHandle (Private, Handle);\r
\r
UnicodeStrToAsciiStr (PrimaryLanguage, PrimaryLang639);\r
\r
- PrimaryLang3066 = ConvertIso639LanguageToRfc3066Language (PrimaryLang639);\r
- ASSERT_EFI_ERROR (PrimaryLang3066 != NULL);\r
+ PrimaryLang4646 = ConvertLanguagesIso639ToRfc4646 (PrimaryLang639);\r
+ ASSERT_EFI_ERROR (PrimaryLang4646 != NULL);\r
\r
- SecLangCodes3066 = HiiLibGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang3066);\r
+ SecLangCodes4646 = HiiGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang4646);\r
\r
- if (SecLangCodes3066 == NULL) {\r
+ if (SecLangCodes4646 == NULL) {\r
Status = EFI_INVALID_PARAMETER;\r
goto Done;\r
}\r
\r
- Status = LangCodes3066To639 (SecLangCodes3066, &SecLangCodes639);\r
- if (EFI_ERROR (Status)) {\r
+ SecLangCodes639 = ConvertLanguagesIso639ToRfc4646 (SecLangCodes4646);\r
+ if (SecLangCodes639 == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
goto Done;\r
}\r
\r
}\r
\r
//\r
- // The language returned is in RFC 3066 format.\r
+ // The language returned is in RFC 4646 format.\r
//\r
*LanguageString = AsciiStrToUnicodeStr (SecLangCodes639, UnicodeSecLangCodes639);\r
+ Status = EFI_SUCCESS;\r
\r
Done:\r
if (PrimaryLang639 != NULL) {\r
FreePool (SecLangCodes639);\r
}\r
\r
- if (PrimaryLang3066 != NULL) {\r
- FreePool (PrimaryLang3066);\r
+ if (PrimaryLang4646 != NULL) {\r
+ FreePool (PrimaryLang4646);\r
}\r
\r
- if (SecLangCodes3066 != NULL) {\r
- FreePool (SecLangCodes3066);\r
+ if (SecLangCodes4646 != NULL) {\r
+ FreePool (SecLangCodes4646);\r
}\r
if (UnicodeSecLangCodes639 != NULL) {\r
FreePool (UnicodeSecLangCodes639);\r