summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
diff options
context:
space:
mode:
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2009-03-25 10:07:39 +0000
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2009-03-25 10:07:39 +0000
commitbf9af1b959ed47b53131923fe63ef30f3faf3f99 (patch)
tree257cb54d6dce172ed43a3075988aabf519bc764e /MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
parent2fef9e5f7a7738ea1b7d4fd2b8a454358698a64b (diff)
downloadedk2-platforms-bf9af1b959ed47b53131923fe63ef30f3faf3f99.tar.xz
Apply GetBestLanguage() for the implementation of HiiStringIdToImage() API.
E.g. L"PlatformLang" variable is "en" and registered string supports "en-US" git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7954 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/HiiDatabaseDxe/Font.c')
-rw-r--r--MdeModulePkg/Universal/HiiDatabaseDxe/Font.c127
1 files changed, 94 insertions, 33 deletions
diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/Font.c b/MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
index 82f47163b7..6d46fd1e36 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
@@ -2089,12 +2089,17 @@ HiiStringIdToImage (
{
EFI_STATUS Status;
HII_DATABASE_PRIVATE_DATA *Private;
+ EFI_HII_STRING_PROTOCOL *HiiString;
EFI_STRING String;
UINTN StringSize;
UINTN FontLen;
EFI_FONT_INFO *StringFontInfo;
EFI_FONT_DISPLAY_INFO *NewStringInfo;
- CHAR8 CurrentLang[RFC_3066_ENTRY_SIZE];
+ CHAR8 TempSupportedLanguages;
+ CHAR8 *SupportedLanguages;
+ UINTN SupportedLanguagesSize;
+ CHAR8 *CurrentLanguage;
+ CHAR8 *BestLanguage;
if (This == NULL || PackageList == NULL || Blt == NULL || PackageList == NULL) {
return EFI_INVALID_PARAMETER;
@@ -2105,57 +2110,104 @@ HiiStringIdToImage (
}
//
- // When Language points to NULL, current system language is used.
+ // Initialize string pointers to be NULL
//
- if (Language != NULL) {
- AsciiStrCpy (CurrentLang, (CHAR8 *) Language);
- } else {
- GetCurrentLanguage (CurrentLang);
- }
+ SupportedLanguages = NULL;
+ CurrentLanguage = NULL;
+ BestLanguage = NULL;
+ String = NULL;
+ StringInfo = NULL;
+ StringFontInfo = NULL;
+ NewStringInfo = NULL;
//
// Get the string to be displayed.
//
+ Private = HII_FONT_DATABASE_PRIVATE_DATA_FROM_THIS (This);
+ HiiString = &Private->HiiString;
+
+ //
+ // Get the size of supported language.
+ //
+ SupportedLanguagesSize = 0;
+ Status = HiiString->GetLanguages (
+ HiiString,
+ PackageList,
+ &TempSupportedLanguages,
+ &SupportedLanguagesSize
+ );
+ if (Status != EFI_BUFFER_TOO_SMALL) {
+ return Status;
+ }
+
+ SupportedLanguages = AllocatePool (SupportedLanguagesSize);
+ if (SupportedLanguages == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ Status = HiiString->GetLanguages (
+ HiiString,
+ PackageList,
+ SupportedLanguages,
+ &SupportedLanguagesSize
+ );
+ if (EFI_ERROR (Status)) {
+ goto Exit;
+ }
+
+ if (Language == NULL) {
+ Language = "";
+ }
+ CurrentLanguage = GetEfiGlobalVariable (L"PlatformLang");
+ BestLanguage = GetBestLanguage (
+ SupportedLanguages,
+ FALSE,
+ Language,
+ (CurrentLanguage == NULL) ? CurrentLanguage : "",
+ (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang),
+ NULL
+ );
+ if (BestLanguage == NULL) {
+ Status = EFI_NOT_FOUND;
+ goto Exit;
+ }
+
StringSize = MAX_STRING_LENGTH;
String = (EFI_STRING) AllocateZeroPool (StringSize);
if (String == NULL) {
- return EFI_OUT_OF_RESOURCES;
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Exit;
}
- Private = HII_FONT_DATABASE_PRIVATE_DATA_FROM_THIS (This);
- StringFontInfo = NULL;
- NewStringInfo = NULL;
-
- Status = Private->HiiString.GetString (
- &Private->HiiString,
- CurrentLang,
- PackageList,
- StringId,
- String,
- &StringSize,
- &StringFontInfo
- );
+ Status = HiiString->GetString (
+ HiiString,
+ BestLanguage,
+ PackageList,
+ StringId,
+ String,
+ &StringSize,
+ &StringFontInfo
+ );
if (Status == EFI_BUFFER_TOO_SMALL) {
FreePool (String);
String = (EFI_STRING) AllocateZeroPool (StringSize);
if (String == NULL) {
- return EFI_OUT_OF_RESOURCES;
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Exit;
}
- Status = Private->HiiString.GetString (
- &Private->HiiString,
- Language,
- PackageList,
- StringId,
- String,
- &StringSize,
- NULL
- );
-
+ Status = HiiString->GetString (
+ HiiString,
+ BestLanguage,
+ PackageList,
+ StringId,
+ String,
+ &StringSize,
+ NULL
+ );
}
if (EFI_ERROR (Status)) {
- goto Exit;
+ goto Exit;
}
//
@@ -2204,6 +2256,15 @@ HiiStringIdToImage (
);
Exit:
+ if (SupportedLanguages != NULL) {
+ FreePool (SupportedLanguages);
+ }
+ if (CurrentLanguage != NULL) {
+ FreePool (CurrentLanguage);
+ }
+ if (BestLanguage != NULL) {
+ FreePool (BestLanguage);
+ }
if (String != NULL) {
FreePool (String);
}