One minor comment inline below. Reviewed-by: Dandan Bi <dandan...@intel.com> with this is handled.
Thanks, Dandan > -----Original Message----- > From: Abner Chang <abner.ch...@hpe.com> > Sent: Monday, February 1, 2021 11:06 AM > To: devel@edk2.groups.io > Cc: Bi, Dandan <dandan...@intel.com>; Dong, Eric <eric.d...@intel.com>; > Nickle Wang <nickle.w...@hpe.com> > Subject: [PATCH v3] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib > for EDK2 Redfish > > Add HiiGetStringEx and leveraged by HiiGetString function to support getting > string with the best language in optionally. This avoids the string in x-uefi > language is misled to the language defined by "PlatformLang" or the > "Supported Languages". This change is introduced to support x-uefi keyword > language for configuring BIOS setting. > > Signed-off-by: Jiaxin Wu <jiaxin...@intel.com> > Signed-off-by: Siyuan Fu <siyuan...@intel.com> > Signed-off-by: Fan Wang <fan.w...@intel.com> > Signed-off-by: Abner Chang <abner.ch...@hpe.com> > Cc: Dandan Bi <dandan...@intel.com> > Cc: Eric Dong <eric.d...@intel.com> > Cc: Nickle Wang <nickle.w...@hpe.com> > --- > MdeModulePkg/Include/Library/HiiLib.h | 60 ++++++++++--- > MdeModulePkg/Library/UefiHiiLib/HiiString.c | 98 +++++++++++++++------ > 2 files changed, 119 insertions(+), 39 deletions(-) > > diff --git a/MdeModulePkg/Include/Library/HiiLib.h > b/MdeModulePkg/Include/Library/HiiLib.h > index c475cb74a1..cd9027fefd 100644 > --- a/MdeModulePkg/Include/Library/HiiLib.h > +++ b/MdeModulePkg/Include/Library/HiiLib.h > @@ -1,7 +1,8 @@ > /** @file > Public include file for the HII Library > > -Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR> > +(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > @@ -123,16 +124,8 @@ HiiSetString ( > ; > > /** > - Retrieves a string from a string package in a specific language. If the > language > - is not specified, then a string from a string package in the current > platform > - language is retrieved. If the string cannot be retrieved using the > specified > - language or the current platform language, then the string is retrieved > from > - the string package in the first language the string package supports. The > - returned string is allocated using AllocatePool(). The caller is > responsible > - for freeing the allocated buffer using FreePool(). > - > - If HiiHandle is NULL, then ASSERT(). > - If StringId is 0, then ASSERT(). > + Retrieves a string from a string package in a specific language > + specified in Language or in the best lanaguage. See HiiGetStringEx () for > the details. > > @param[in] HiiHandle A handle that was previously registered in the HII > Database. > @param[in] StringId The identifier of the string to retrieved from the > string > @@ -152,8 +145,49 @@ HiiGetString ( > IN EFI_HII_HANDLE HiiHandle, > IN EFI_STRING_ID StringId, > IN CONST CHAR8 *Language OPTIONAL > - ) > -; > + ); > + > +/** > + Retrieves a string from a string package in a specific language or in > +the best > + language at discretion of this function according to the priority of > languages. > + TryBestLanguage is used to get the string in the best language or in > +the language > + specified in Language parameter. The behavior is, > + If TryBestLanguage is TRUE, this function looks for the best language for > the string. > + - If the string can not be retrieved using the specified language or the > current > + platform language, then the string is retrieved from the string package > in > the > + first language the string package supports. > + If TryBestLanguage is FALSE, Language must be specified for retrieving the > string. > + > + The returned string is allocated using AllocatePool(). The caller is > + responsible for freeing the allocated buffer using FreePool(). > + > + If HiiHandle is NULL, then ASSERT(). > + If StringId is 0, then ASSET. > + If TryBestLanguage is FALE and Language is NULL, then ASSERT(). > + > + @param[in] HiiHandle A handle that was previously registered in > the > HII Database. > + @param[in] StringId The identifier of the string to retrieved > from the > string > + package associated with HiiHandle. > + @param[in] Language The language of the string to retrieve. If > this > parameter > + is NULL, then the current platform language > is used. The > + format of Language must follow the language > format > assumed > + the HII Database. > + @param[in] TryBestLanguage If TRUE, try to get the best matching > language from all > + supported languages.If FALSE, the Language > must be > assigned > + for the StringID. > + > + @retval NULL The string specified by StringId is not present in the > string > package. > + @retval Other The string was returned. > + > +**/ > +EFI_STRING > +EFIAPI > +HiiGetStringEx ( > + IN EFI_HII_HANDLE HiiHandle, > + IN EFI_STRING_ID StringId, > + IN CONST CHAR8 *Language OPTIONAL, > + IN BOOLEAN TryBestLanguage > + ); > > /** > Retrieves a string from a string package named by GUID, in the specified > language. > diff --git a/MdeModulePkg/Library/UefiHiiLib/HiiString.c > b/MdeModulePkg/Library/UefiHiiLib/HiiString.c > index 95229f8a8c..a9a11aef98 100644 > --- a/MdeModulePkg/Library/UefiHiiLib/HiiString.c > +++ b/MdeModulePkg/Library/UefiHiiLib/HiiString.c > @@ -1,7 +1,8 @@ > /** @file > HII Library implementation that uses DXE protocols and services. > > - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2006 - 2021, Intel Corporation. All rights > + reserved.<BR> > + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > @@ -190,16 +191,8 @@ HiiGetPackageString ( } > > /** > - Retrieves a string from a string package in a specific language. If the > language > - is not specified, then a string from a string package in the current > platform > - language is retrieved. If the string can not be retrieved using the > specified > - language or the current platform language, then the string is retrieved > from > - the string package in the first language the string package supports. The > - returned string is allocated using AllocatePool(). The caller is > responsible > - for freeing the allocated buffer using FreePool(). > - > - If HiiHandle is NULL, then ASSERT(). > - If StringId is 0, then ASSET. > + Retrieves a string from a string package in a specific language > + specified in Language or in the best lanaguage. See HiiGetStringEx () for > the details. > > @param[in] HiiHandle A handle that was previously registered in the HII > Database. > @param[in] StringId The identifier of the string to retrieved from the > string > @@ -220,6 +213,51 @@ HiiGetString ( > IN EFI_STRING_ID StringId, > IN CONST CHAR8 *Language OPTIONAL > ) > +{ > + return HiiGetStringEx (HiiHandle, StringId, Language, TRUE); } > + > +/** > + Retrieves a string from a string package in a specific language or in > +the best > + language at discretion of this function according to the priority of > languages. > + TryBestLanguage is used to get the string in the best language or in > +the language > + specified in Language parameter. The behavior is, > + If TryBestLanguage is TRUE, this function looks for the best language for > the string. > + - If the string can not be retrieved using the specified language or the > current > + platform language, then the string is retrieved from the string package > in > the > + first language the string package supports. > + If TryBestLanguage is FALSE, Language must be specified for retrieving the > string. > + > + The returned string is allocated using AllocatePool(). The caller is > + responsible for freeing the allocated buffer using FreePool(). > + > + If HiiHandle is NULL, then ASSERT(). > + If StringId is 0, then ASSET. > + If TryBestLanguage is FALE and Language is NULL, then ASSERT(). > + > + @param[in] HiiHandle A handle that was previously registered in > the > HII Database. > + @param[in] StringId The identifier of the string to retrieved > from the > string > + package associated with HiiHandle. > + @param[in] Language The language of the string to retrieve. If > this > parameter > + is NULL, then the current platform language > is used. The > + format of Language must follow the language > format > assumed > + the HII Database. > + @param[in] TryBestLanguage If TRUE, try to get the best matching > language from all > + supported languages.If FALSE, the Language > must be > assigned > + for the StringID. > + > + @retval NULL The string specified by StringId is not present in the > string > package. > + @retval Other The string was returned. > + > +**/ > +EFI_STRING > +EFIAPI > +HiiGetStringEx ( > + IN EFI_HII_HANDLE HiiHandle, > + IN EFI_STRING_ID StringId, > + IN CONST CHAR8 *Language OPTIONAL, > + IN BOOLEAN TryBestLanguage > + ) > { > EFI_STATUS Status; > UINTN StringSize; > @@ -231,7 +269,10 @@ HiiGetString ( > > ASSERT (HiiHandle != NULL); > ASSERT (StringId != 0); > - > + // > + // Language must be specified if TryBestLanguage = FALSE. > + // > + ASSERT (!(TryBestLanguage == FALSE && Language == NULL)); One minor here, in order to following the coding style, this seems should be ASSERT (!(!TryBestLanguage && Language == NULL)); Please help double check. > // > // Initialize all allocated buffers to NULL > // > @@ -261,21 +302,26 @@ HiiGetString ( > Language = ""; > } > > - // > - // Get the best matching language from SupportedLanguages > - // > - BestLanguage = GetBestLanguage ( > - SupportedLanguages, > - FALSE, // RFC > 4646 mode > - Language, // > Highest priority > - PlatformLanguage != NULL ? PlatformLanguage : "", // Next > highest priority > - SupportedLanguages, // > Lowest priority > - NULL > - ); > - if (BestLanguage == NULL) { > - goto Error; > + if (TryBestLanguage) { > + // > + // Get the best matching language from SupportedLanguages > + // > + BestLanguage = GetBestLanguage ( > + SupportedLanguages, > + FALSE, // > RFC 4646 mode > + Language, // > Highest priority > + PlatformLanguage != NULL ? PlatformLanguage : "", // > Next > highest priority > + SupportedLanguages, // > Lowest priority > + NULL > + ); > + if (BestLanguage == NULL) { > + goto Error; > + } > + } else { > + BestLanguage = (CHAR8 *) Language; > } > > + > // > // Retrieve the size of the string in the string package for the > BestLanguage > // > @@ -337,7 +383,7 @@ Error: > if (PlatformLanguage != NULL) { > FreePool (PlatformLanguage); > } > - if (BestLanguage != NULL) { > + if (TryBestLanguage && BestLanguage != NULL) { > FreePool (BestLanguage); > } > > -- > 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#71108): https://edk2.groups.io/g/devel/message/71108 Mute This Topic: https://groups.io/mt/80276844/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-