MdeModulePkg/Include/Library/HiiLib.h | 60 ++++++++++--- MdeModulePkg/Library/UefiHiiLib/HiiString.c | 98 +++++++++++++++------ 2 files changed, 119 insertions(+), 39 deletions(-)
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.wu@intel.com>
Signed-off-by: Siyuan Fu <siyuan.fu@intel.com>
Signed-off-by: Fan Wang <fan.wang@intel.com>
Signed-off-by: Abner Chang <abner.chang@hpe.com>
Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Nickle Wang <nickle.wang@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));
//
// 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 (#71001): https://edk2.groups.io/g/devel/message/71001
Mute This Topic: https://groups.io/mt/80276844/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
One minor comment inline below. Reviewed-by: Dandan Bi <dandan.bi@intel.com> with this is handled. Thanks, Dandan > -----Original Message----- > From: Abner Chang <abner.chang@hpe.com> > Sent: Monday, February 1, 2021 11:06 AM > To: devel@edk2.groups.io > Cc: Bi, Dandan <dandan.bi@intel.com>; Dong, Eric <eric.dong@intel.com>; > Nickle Wang <nickle.wang@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.wu@intel.com> > Signed-off-by: Siyuan Fu <siyuan.fu@intel.com> > Signed-off-by: Fan Wang <fan.wang@intel.com> > Signed-off-by: Abner Chang <abner.chang@hpe.com> > Cc: Dandan Bi <dandan.bi@intel.com> > Cc: Eric Dong <eric.dong@intel.com> > Cc: Nickle Wang <nickle.wang@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/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
Yes Dandan, yours follow coding standard. I will handle that. Also, I will help to push the patch to upstream with your review tag. Thanks Abner > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Dandan Bi > Sent: Wednesday, February 3, 2021 7:34 PM > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>; > devel@edk2.groups.io > Cc: Dong, Eric <eric.dong@intel.com>; Wang, Nickle (HPS SW) > <nickle.wang@hpe.com> > Subject: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add > HiiGetStringEx to UefiHiiLib for EDK2 Redfish > > One minor comment inline below. > Reviewed-by: Dandan Bi <dandan.bi@intel.com> with this is handled. > > Thanks, > Dandan > > -----Original Message----- > > From: Abner Chang <abner.chang@hpe.com> > > Sent: Monday, February 1, 2021 11:06 AM > > To: devel@edk2.groups.io > > Cc: Bi, Dandan <dandan.bi@intel.com>; Dong, Eric > > <eric.dong@intel.com>; Nickle Wang <nickle.wang@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.wu@intel.com> > > Signed-off-by: Siyuan Fu <siyuan.fu@intel.com> > > Signed-off-by: Fan Wang <fan.wang@intel.com> > > Signed-off-by: Abner Chang <abner.chang@hpe.com> > > Cc: Dandan Bi <dandan.bi@intel.com> > > Cc: Eric Dong <eric.dong@intel.com> > > Cc: Nickle Wang <nickle.wang@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 (#71110): https://edk2.groups.io/g/devel/message/71110 Mute This Topic: https://groups.io/mt/80276844/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
If TryBestLanguage is FALE and Language is NULL, then ASSERT(). So, ASSERT statement should be ASSERT (TryBestLanguage || (Language != NULL)); Is this clear? Thanks Liming > -----邮件原件----- > 发件人: bounce+27952+71110+4905953+8761045@groups.io > <bounce+27952+71110+4905953+8761045@groups.io> 代表 Abner Chang > 发送时间: 2021年2月3日 23:21 > 收件人: devel@edk2.groups.io; dandan.bi@intel.com > 抄送: Dong, Eric <eric.dong@intel.com>; Wang, Nickle (HPS SW) > <nickle.wang@hpe.com> > 主题: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add > HiiGetStringEx to UefiHiiLib for EDK2 Redfish > > Yes Dandan, yours follow coding standard. I will handle that. > Also, I will help to push the patch to upstream with your review tag. > > Thanks > Abner > > > -----Original Message----- > > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > > Dandan Bi > > Sent: Wednesday, February 3, 2021 7:34 PM > > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>; > > devel@edk2.groups.io > > Cc: Dong, Eric <eric.dong@intel.com>; Wang, Nickle (HPS SW) > > <nickle.wang@hpe.com> > > Subject: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add > > HiiGetStringEx to UefiHiiLib for EDK2 Redfish > > > > One minor comment inline below. > > Reviewed-by: Dandan Bi <dandan.bi@intel.com> with this is handled. > > > > Thanks, > > Dandan > > > -----Original Message----- > > > From: Abner Chang <abner.chang@hpe.com> > > > Sent: Monday, February 1, 2021 11:06 AM > > > To: devel@edk2.groups.io > > > Cc: Bi, Dandan <dandan.bi@intel.com>; Dong, Eric > > > <eric.dong@intel.com>; Nickle Wang <nickle.wang@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.wu@intel.com> > > > Signed-off-by: Siyuan Fu <siyuan.fu@intel.com> > > > Signed-off-by: Fan Wang <fan.wang@intel.com> > > > Signed-off-by: Abner Chang <abner.chang@hpe.com> > > > Cc: Dandan Bi <dandan.bi@intel.com> > > > Cc: Eric Dong <eric.dong@intel.com> > > > Cc: Nickle Wang <nickle.wang@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 (#71184): https://edk2.groups.io/g/devel/message/71184 Mute This Topic: https://groups.io/mt/80374844/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
This looks to me not quite intuitional. !(!TryBestLanguage && Language == NULL) seems more straightforward and exactly what we would like to catch. Abner Get Outlook for Android<https://aka.ms/ghei36> ________________________________ From: devel@edk2.groups.io <devel@edk2.groups.io> on behalf of gaoliming <gaoliming@byosoft.com.cn> Sent: Thursday, February 4, 2021, 3:13 PM To: devel@edk2.groups.io; Chang, Abner (HPS SW/FW Technologist); dandan.bi@intel.com Cc: 'Dong, Eric'; Wang, Nickle (HPS SW) Subject: 回复: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish If TryBestLanguage is FALE and Language is NULL, then ASSERT(). So, ASSERT statement should be ASSERT (TryBestLanguage || (Language != NULL)); Is this clear? Thanks Liming > -----邮件原件----- > 发件人: bounce+27952+71110+4905953+8761045@groups.io > <bounce+27952+71110+4905953+8761045@groups.io> 代表 Abner Chang > 发送时间: 2021年2月3日 23:21 > 收件人: devel@edk2.groups.io; dandan.bi@intel.com > 抄送: Dong, Eric <eric.dong@intel.com>; Wang, Nickle (HPS SW) > <nickle.wang@hpe.com> > 主题: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add > HiiGetStringEx to UefiHiiLib for EDK2 Redfish > > Yes Dandan, yours follow coding standard. I will handle that. > Also, I will help to push the patch to upstream with your review tag. > > Thanks > Abner > > > -----Original Message----- > > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > > Dandan Bi > > Sent: Wednesday, February 3, 2021 7:34 PM > > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>; > > devel@edk2.groups.io > > Cc: Dong, Eric <eric.dong@intel.com>; Wang, Nickle (HPS SW) > > <nickle.wang@hpe.com> > > Subject: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add > > HiiGetStringEx to UefiHiiLib for EDK2 Redfish > > > > One minor comment inline below. > > Reviewed-by: Dandan Bi <dandan.bi@intel.com> with this is handled. > > > > Thanks, > > Dandan > > > -----Original Message----- > > > From: Abner Chang <abner.chang@hpe.com> > > > Sent: Monday, February 1, 2021 11:06 AM > > > To: devel@edk2.groups.io > > > Cc: Bi, Dandan <dandan.bi@intel.com>; Dong, Eric > > > <eric.dong@intel.com>; Nickle Wang <nickle.wang@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.wu@intel.com> > > > Signed-off-by: Siyuan Fu <siyuan.fu@intel.com> > > > Signed-off-by: Fan Wang <fan.wang@intel.com> > > > Signed-off-by: Abner Chang <abner.chang@hpe.com> > > > Cc: Dandan Bi <dandan.bi@intel.com> > > > Cc: Eric Dong <eric.dong@intel.com> > > > Cc: Nickle Wang <nickle.wang@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 (#71190): https://edk2.groups.io/g/devel/message/71190 Mute This Topic: https://groups.io/mt/80375549/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.