Roll back changes to apply GetBestLanguage() in HiiDataBase. Exact language match should be used in HiiDatabase.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8384 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
rsun3
2009-05-26 03:48:50 +00:00
parent b0a5e682d6
commit f324bf4dbe
4 changed files with 109 additions and 79 deletions

View File

@ -307,7 +307,6 @@ HiiThunkGetString (
Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This); Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);
Iso639AsciiLanguage = NULL;
Rfc4646AsciiLanguage = NULL; Rfc4646AsciiLanguage = NULL;
if (LanguageString != NULL) { if (LanguageString != NULL) {
@ -322,6 +321,7 @@ HiiThunkGetString (
// in Iso639. So map it to the Language Identifier defined in RFC4646. // in Iso639. So map it to the Language Identifier defined in RFC4646.
// //
Rfc4646AsciiLanguage = ConvertLanguagesIso639ToRfc4646 (Iso639AsciiLanguage); Rfc4646AsciiLanguage = ConvertLanguagesIso639ToRfc4646 (Iso639AsciiLanguage);
FreePool (Iso639AsciiLanguage);
// //
// If Rfc4646AsciiLanguage is NULL, more language mapping must be added to // If Rfc4646AsciiLanguage is NULL, more language mapping must be added to
@ -337,67 +337,56 @@ HiiThunkGetString (
goto Done; goto Done;
} }
if (Rfc4646AsciiLanguage == NULL) { //
// // Get the languages that the package specified by HiiHandle supports
// Get the languages that the package specified by HiiHandle supports //
// SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle);
SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle); if (SupportedLanguages == NULL) {
if (SupportedLanguages == NULL) { goto Error2;
goto Error2;
}
//
// Get the current platform language setting
//
PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");
if (PlatformLanguage == NULL) {
goto Error1;
}
//
// Get the best matching language from SupportedLanguages
//
BestLanguage = GetBestLanguage (
SupportedLanguages,
FALSE, // RFC 4646 mode
PlatformLanguage, // Next highest priority
SupportedLanguages, // Lowest priority
NULL
);
if (BestLanguage == NULL) {
FreePool (PlatformLanguage);
Error1:
FreePool (SupportedLanguages);
Error2:
Status = EFI_INVALID_PARAMETER;
goto Done;
}
Status = mHiiStringProtocol->GetString (
mHiiStringProtocol,
BestLanguage,
UefiHiiHandle,
Token,
StringBuffer,
BufferLengthTemp,
NULL
);
FreePool (BestLanguage);
} else {
Status = mHiiStringProtocol->GetString (
mHiiStringProtocol,
Rfc4646AsciiLanguage,
UefiHiiHandle,
Token,
StringBuffer,
BufferLengthTemp,
NULL
);
} }
//
// Get the current platform language setting
//
PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");
if (PlatformLanguage == NULL) {
goto Error1;
}
//
// Get the best matching language from SupportedLanguages
//
BestLanguage = GetBestLanguage (
SupportedLanguages,
FALSE, // RFC 4646 mode
(Rfc4646AsciiLanguage != NULL) ? Rfc4646AsciiLanguage : "",
PlatformLanguage, // Next highest priority
SupportedLanguages, // Lowest priority
NULL
);
if (BestLanguage == NULL) {
FreePool (PlatformLanguage);
Error1:
FreePool (SupportedLanguages);
Error2:
Status = EFI_INVALID_PARAMETER;
goto Done;
}
Status = mHiiStringProtocol->GetString (
mHiiStringProtocol,
BestLanguage,
UefiHiiHandle,
Token,
StringBuffer,
BufferLengthTemp,
NULL
);
FreePool (BestLanguage);
Done: Done:
if (Iso639AsciiLanguage != NULL) { if (Rfc4646AsciiLanguage != NULL) {
FreePool (Iso639AsciiLanguage); FreePool (Rfc4646AsciiLanguage);
} }
return Status; return Status;

View File

@ -784,7 +784,6 @@ InsertStringPackage (
EFI_STATUS Status; EFI_STATUS Status;
EFI_HII_PACKAGE_HEADER PackageHeader; EFI_HII_PACKAGE_HEADER PackageHeader;
CHAR8 *Language; CHAR8 *Language;
CHAR8 *MatchedLanguage;
UINT32 LanguageSize; UINT32 LanguageSize;
LIST_ENTRY *Link; LIST_ENTRY *Link;
@ -810,10 +809,8 @@ InsertStringPackage (
AsciiStrCpy (Language, (CHAR8 *) PackageHdr + HeaderSize - LanguageSize); AsciiStrCpy (Language, (CHAR8 *) PackageHdr + HeaderSize - LanguageSize);
for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) { for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) {
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);
MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL); if (HiiCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) {
if (MatchedLanguage != NULL) {
FreePool (Language); FreePool (Language);
FreePool (MatchedLanguage);
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
} }

View File

@ -1745,6 +1745,24 @@ HiiGetAltCfg (
OUT EFI_STRING *AltCfgResp OUT EFI_STRING *AltCfgResp
); );
/**
Compare whether two names of languages are identical.
@param Language1 Name of language 1
@param Language2 Name of language 2
@retval TRUE same
@retval FALSE not same
**/
BOOLEAN
HiiCompareLanguage (
IN CHAR8 *Language1,
IN CHAR8 *Language2
)
;
// //
// Global variables // Global variables
// //

View File

@ -968,7 +968,6 @@ HiiNewString (
EFI_HII_SIBT_EXT2_BLOCK Ext2; EFI_HII_SIBT_EXT2_BLOCK Ext2;
HII_FONT_INFO *LocalFont; HII_FONT_INFO *LocalFont;
HII_GLOBAL_FONT_INFO *GlobalFont; HII_GLOBAL_FONT_INFO *GlobalFont;
CHAR8 *MatchedLanguage;
if (This == NULL || String == NULL || StringId == NULL || Language == NULL || PackageList == NULL) { if (This == NULL || String == NULL || StringId == NULL || Language == NULL || PackageList == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
@ -1015,9 +1014,7 @@ HiiNewString (
Link = Link->ForwardLink Link = Link->ForwardLink
) { ) {
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);
MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL); if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {
if (MatchedLanguage != NULL) {
FreePool (MatchedLanguage);
Matched = TRUE; Matched = TRUE;
break; break;
} }
@ -1323,7 +1320,6 @@ HiiGetString (
HII_DATABASE_RECORD *DatabaseRecord; HII_DATABASE_RECORD *DatabaseRecord;
HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageListNode; HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageListNode;
HII_STRING_PACKAGE_INSTANCE *StringPackage; HII_STRING_PACKAGE_INSTANCE *StringPackage;
CHAR8 *MatchedLanguage;
if (This == NULL || Language == NULL || StringId < 1 || StringSize == NULL || PackageList == NULL) { if (This == NULL || Language == NULL || StringId < 1 || StringSize == NULL || PackageList == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
@ -1357,9 +1353,7 @@ HiiGetString (
Link = Link->ForwardLink Link = Link->ForwardLink
) { ) {
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);
MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL); if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {
if (MatchedLanguage != NULL) {
FreePool (MatchedLanguage);
Status = GetStringWorker (Private, StringPackage, StringId, String, StringSize, StringFontInfo); Status = GetStringWorker (Private, StringPackage, StringId, String, StringSize, StringFontInfo);
if (Status != EFI_NOT_FOUND) { if (Status != EFI_NOT_FOUND) {
return Status; return Status;
@ -1427,7 +1421,6 @@ HiiSetString (
HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageListNode; HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageListNode;
HII_STRING_PACKAGE_INSTANCE *StringPackage; HII_STRING_PACKAGE_INSTANCE *StringPackage;
UINT32 OldPackageLen; UINT32 OldPackageLen;
CHAR8 *MatchedLanguage;
if (This == NULL || Language == NULL || StringId < 1 || String == NULL || PackageList == NULL) { if (This == NULL || Language == NULL || StringId < 1 || String == NULL || PackageList == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
@ -1453,9 +1446,7 @@ HiiSetString (
Link = Link->ForwardLink Link = Link->ForwardLink
) { ) {
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);
MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) Language, NULL); if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {
if (MatchedLanguage != NULL) {
FreePool (MatchedLanguage);
OldPackageLen = StringPackage->StringPkgHdr->Header.Length; OldPackageLen = StringPackage->StringPkgHdr->Header.Length;
Status = SetStringWorker ( Status = SetStringWorker (
Private, Private,
@ -1612,7 +1603,6 @@ HiiGetSecondaryLanguages (
HII_STRING_PACKAGE_INSTANCE *StringPackage; HII_STRING_PACKAGE_INSTANCE *StringPackage;
CHAR8 *Languages; CHAR8 *Languages;
UINTN ResultSize; UINTN ResultSize;
CHAR8 *MatchedLanguage;
if (This == NULL || PackageList == NULL || FirstLanguage == NULL) { if (This == NULL || PackageList == NULL || FirstLanguage == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
@ -1645,9 +1635,7 @@ HiiGetSecondaryLanguages (
Link1 = Link1->ForwardLink Link1 = Link1->ForwardLink
) { ) {
StringPackage = CR (Link1, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); StringPackage = CR (Link1, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);
MatchedLanguage = GetBestLanguage (StringPackage->StringPkgHdr->Language, FALSE, (CHAR8 *) FirstLanguage, NULL); if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) {
if (MatchedLanguage != NULL) {
FreePool (MatchedLanguage);
Languages = StringPackage->StringPkgHdr->Language; Languages = StringPackage->StringPkgHdr->Language;
// //
// Language is a series of ';' terminated strings, first one is primary // Language is a series of ';' terminated strings, first one is primary
@ -1675,3 +1663,41 @@ HiiGetSecondaryLanguages (
return EFI_INVALID_LANGUAGE; return EFI_INVALID_LANGUAGE;
} }
/**
Compare whether two names of languages are identical.
@param Language1 Name of language 1
@param Language2 Name of language 2
@retval TRUE same
@retval FALSE not same
**/
BOOLEAN
HiiCompareLanguage (
IN CHAR8 *Language1,
IN CHAR8 *Language2
)
{
//
// Porting Guide:
// This library interface is simply obsolete.
// Include the source code to user code.
//
UINTN Index;
for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) {
if (Language1[Index] != Language2[Index]) {
return FALSE;
}
}
if (((Language1[Index] == 0) && (Language2[Index] == 0)) ||
((Language1[Index] == 0) && (Language2[Index] != ';')) ||
((Language1[Index] == ';') && (Language2[Index] != 0)) ||
((Language1[Index] == ';') && (Language2[Index] != ';'))) {
return TRUE;
}
return FALSE;
}