From 43ffc47f9c270ee39b02cc5b18fa031ecdae6f25 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Wed, 11 Nov 2009 05:19:30 +0000 Subject: [PATCH] Enhance HiiThunkGetString to handle the case that PlatformLanguage is not set. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9408 6f19259b-4bc3-4df7-8a09-765794883524 --- .../FrameworkHiiOnUefiHiiThunk/Strings.c | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Strings.c b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Strings.c index d83750bc9b..3165f62676 100644 --- a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Strings.c +++ b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Strings.c @@ -308,6 +308,9 @@ HiiThunkGetString ( Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This); Rfc4646AsciiLanguage = NULL; + SupportedLanguages = NULL; + PlatformLanguage = NULL; + Status = EFI_SUCCESS; if (LanguageString != NULL) { Iso639AsciiLanguage = AllocateZeroPool (StrLen (LanguageString) + 1); @@ -328,7 +331,6 @@ HiiThunkGetString ( // Iso639ToRfc4646Map. // ASSERT (Rfc4646AsciiLanguage != NULL); - } UefiHiiHandle = FwHiiHandleToUefiHiiHandle (Private, Handle); @@ -342,16 +344,13 @@ HiiThunkGetString ( // SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle); if (SupportedLanguages == NULL) { - goto Error2; + goto Done; } // // Get the current platform language setting // PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang"); - if (PlatformLanguage == NULL) { - goto Error1; - } // // Get the best matching language from SupportedLanguages @@ -359,36 +358,38 @@ HiiThunkGetString ( BestLanguage = GetBestLanguage ( SupportedLanguages, FALSE, // RFC 4646 mode - (Rfc4646AsciiLanguage != NULL) ? Rfc4646AsciiLanguage : "", - PlatformLanguage, // Next highest priority + (Rfc4646AsciiLanguage != NULL) ? Rfc4646AsciiLanguage : "", // Highest priority + (PlatformLanguage != NULL) ? PlatformLanguage : "", // Next highest priority SupportedLanguages, // Lowest priority NULL ); - if (BestLanguage == NULL) { - FreePool (PlatformLanguage); -Error1: - FreePool (SupportedLanguages); -Error2: + if (BestLanguage != NULL) { + Status = mHiiStringProtocol->GetString ( + mHiiStringProtocol, + BestLanguage, + UefiHiiHandle, + Token, + StringBuffer, + BufferLengthTemp, + NULL + ); + FreePool (BestLanguage); + } else { Status = EFI_INVALID_PARAMETER; - goto Done; } - Status = mHiiStringProtocol->GetString ( - mHiiStringProtocol, - BestLanguage, - UefiHiiHandle, - Token, - StringBuffer, - BufferLengthTemp, - NULL - ); - FreePool (BestLanguage); - Done: if (Rfc4646AsciiLanguage != NULL) { FreePool (Rfc4646AsciiLanguage); } - + + if (SupportedLanguages != NULL) { + FreePool (SupportedLanguages); + } + + if (PlatformLanguage != NULL) { + FreePool (PlatformLanguage); + } return Status; }