\r
Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
- Iso639AsciiLanguage = NULL;\r
Rfc4646AsciiLanguage = NULL;\r
\r
if (LanguageString != NULL) {\r
// in Iso639. So map it to the Language Identifier defined in RFC4646.\r
//\r
Rfc4646AsciiLanguage = ConvertLanguagesIso639ToRfc4646 (Iso639AsciiLanguage);\r
+ FreePool (Iso639AsciiLanguage);\r
\r
//\r
// If Rfc4646AsciiLanguage is NULL, more language mapping must be added to \r
goto Done;\r
}\r
\r
- if (Rfc4646AsciiLanguage == NULL) {\r
- //\r
- // Get the languages that the package specified by HiiHandle supports\r
- //\r
- SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle);\r
- if (SupportedLanguages == NULL) {\r
- goto Error2;\r
- }\r
+ //\r
+ // Get the languages that the package specified by HiiHandle supports\r
+ //\r
+ SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle);\r
+ if (SupportedLanguages == NULL) {\r
+ goto Error2;\r
+ }\r
\r
- //\r
- // Get the current platform language setting\r
- //\r
- PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
- if (PlatformLanguage == NULL) {\r
- goto Error1;\r
- }\r
+ //\r
+ // Get the current platform language setting\r
+ //\r
+ PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
+ if (PlatformLanguage == NULL) {\r
+ goto Error1;\r
+ }\r
\r
- //\r
- // Get the best matching language from SupportedLanguages\r
- //\r
- BestLanguage = GetBestLanguage (\r
- SupportedLanguages, \r
- FALSE, // RFC 4646 mode\r
- PlatformLanguage, // Next highest priority\r
- SupportedLanguages, // Lowest priority \r
- NULL\r
- );\r
- if (BestLanguage == NULL) {\r
- FreePool (PlatformLanguage);\r
+ //\r
+ // Get the best matching language from SupportedLanguages\r
+ //\r
+ BestLanguage = GetBestLanguage (\r
+ SupportedLanguages, \r
+ FALSE, // RFC 4646 mode\r
+ (Rfc4646AsciiLanguage != NULL) ? Rfc4646AsciiLanguage : "",\r
+ PlatformLanguage, // Next highest priority\r
+ SupportedLanguages, // Lowest priority \r
+ NULL\r
+ );\r
+ if (BestLanguage == NULL) {\r
+ FreePool (PlatformLanguage);\r
Error1:\r
- FreePool (SupportedLanguages);\r
+ FreePool (SupportedLanguages);\r
Error2:\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
- }\r
-\r
- Status = mHiiStringProtocol->GetString (\r
- mHiiStringProtocol,\r
- BestLanguage,\r
- UefiHiiHandle,\r
- Token,\r
- StringBuffer,\r
- BufferLengthTemp,\r
- NULL\r
- );\r
- FreePool (BestLanguage);\r
- } else {\r
- Status = mHiiStringProtocol->GetString (\r
- mHiiStringProtocol,\r
- Rfc4646AsciiLanguage,\r
- UefiHiiHandle,\r
- Token,\r
- StringBuffer,\r
- BufferLengthTemp,\r
- NULL\r
- );\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
\r
+ Status = mHiiStringProtocol->GetString (\r
+ mHiiStringProtocol,\r
+ BestLanguage,\r
+ UefiHiiHandle,\r
+ Token,\r
+ StringBuffer,\r
+ BufferLengthTemp,\r
+ NULL\r
+ );\r
+ FreePool (BestLanguage);\r
+\r
Done:\r
- if (Iso639AsciiLanguage != NULL) {\r
- FreePool (Iso639AsciiLanguage);\r
+ if (Rfc4646AsciiLanguage != NULL) {\r
+ FreePool (Rfc4646AsciiLanguage);\r
}\r
\r
return Status;\r
EFI_HII_SIBT_EXT2_BLOCK Ext2;\r
HII_FONT_INFO *LocalFont;\r
HII_GLOBAL_FONT_INFO *GlobalFont;\r
- CHAR8 *MatchedLanguage;\r
\r
if (This == NULL || String == NULL || StringId == NULL || Language == NULL || PackageList == NULL) {\r
return EFI_INVALID_PARAMETER;\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL);\r
- if (MatchedLanguage != NULL) {\r
- FreePool (MatchedLanguage);\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
Matched = TRUE;\r
break;\r
}\r
HII_DATABASE_RECORD *DatabaseRecord;\r
HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageListNode;\r
HII_STRING_PACKAGE_INSTANCE *StringPackage;\r
- CHAR8 *MatchedLanguage;\r
\r
if (This == NULL || Language == NULL || StringId < 1 || StringSize == NULL || PackageList == NULL) {\r
return EFI_INVALID_PARAMETER;\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL);\r
- if (MatchedLanguage != NULL) {\r
- FreePool (MatchedLanguage);\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
Status = GetStringWorker (Private, StringPackage, StringId, String, StringSize, StringFontInfo);\r
if (Status != EFI_NOT_FOUND) {\r
return Status;\r
HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageListNode;\r
HII_STRING_PACKAGE_INSTANCE *StringPackage;\r
UINT32 OldPackageLen;\r
- CHAR8 *MatchedLanguage;\r
\r
if (This == NULL || Language == NULL || StringId < 1 || String == NULL || PackageList == NULL) {\r
return EFI_INVALID_PARAMETER;\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL);\r
- if (MatchedLanguage != NULL) {\r
- FreePool (MatchedLanguage);\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
OldPackageLen = StringPackage->StringPkgHdr->Header.Length;\r
Status = SetStringWorker (\r
Private,\r
HII_STRING_PACKAGE_INSTANCE *StringPackage;\r
CHAR8 *Languages;\r
UINTN ResultSize;\r
- CHAR8 *MatchedLanguage;\r
\r
if (This == NULL || PackageList == NULL || FirstLanguage == NULL) {\r
return EFI_INVALID_PARAMETER;\r
Link1 = Link1->ForwardLink\r
) {\r
StringPackage = CR (Link1, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) FirstLanguage, NULL);\r
- if (MatchedLanguage != NULL) {\r
- FreePool (MatchedLanguage);\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) {\r
Languages = StringPackage->StringPkgHdr->Language;\r
//\r
// Language is a series of ';' terminated strings, first one is primary\r
return EFI_INVALID_LANGUAGE;\r
}\r
\r
+/**\r
+ Compare whether two names of languages are identical.\r
+\r
+ @param Language1 Name of language 1\r
+ @param Language2 Name of language 2\r
+\r
+ @retval TRUE same\r
+ @retval FALSE not same\r
+\r
+**/\r
+BOOLEAN\r
+HiiCompareLanguage (\r
+ IN CHAR8 *Language1,\r
+ IN CHAR8 *Language2\r
+ )\r
+{\r
+ //\r
+ // Porting Guide:\r
+ // This library interface is simply obsolete.\r
+ // Include the source code to user code.\r
+ //\r
+ UINTN Index;\r
+\r
+ for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) {\r
+ if (Language1[Index] != Language2[Index]) {\r
+ return FALSE;\r
+ }\r
+ }\r
+\r
+ if (((Language1[Index] == 0) && (Language2[Index] == 0)) || \r
+ ((Language1[Index] == 0) && (Language2[Index] != ';')) ||\r
+ ((Language1[Index] == ';') && (Language2[Index] != 0)) ||\r
+ ((Language1[Index] == ';') && (Language2[Index] != ';'))) {\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r