[edk2-devel] [PATCH v2 RESEND] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish

Abner Chang posted 1 patch 3 years, 2 months ago
Failed in applying to current master (apply log)
There is a newer version of this series
MdeModulePkg/Include/Library/HiiLib.h       | 41 ++++++++++-
MdeModulePkg/Library/UefiHiiLib/HiiString.c | 79 ++++++++++++++++-----
2 files changed, 101 insertions(+), 19 deletions(-)
[edk2-devel] [PATCH v2 RESEND] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish
Posted by Abner Chang 3 years, 2 months ago
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       | 41 ++++++++++-
 MdeModulePkg/Library/UefiHiiLib/HiiString.c | 79 ++++++++++++++++-----
 2 files changed, 101 insertions(+), 19 deletions(-)

diff --git a/MdeModulePkg/Include/Library/HiiLib.h b/MdeModulePkg/Include/Library/HiiLib.h
index c475cb74a1..14dcc3b5b6 100644
--- a/MdeModulePkg/Include/Library/HiiLib.h
+++ b/MdeModulePkg/Include/Library/HiiLib.h
@@ -1,7 +1,7 @@
 /** @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>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -152,8 +152,43 @@ 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.  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.
+
+  @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..2d6c9968ba 100644
--- a/MdeModulePkg/Library/UefiHiiLib/HiiString.c
+++ b/MdeModulePkg/Library/UefiHiiLib/HiiString.c
@@ -1,7 +1,7 @@
 /** @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>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -220,6 +220,45 @@ 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.  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.
+
+  @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 +270,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 +303,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 +384,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 (#70832): https://edk2.groups.io/g/devel/message/70832
Mute This Topic: https://groups.io/mt/80174343/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


回复: [edk2-devel] [PATCH v2 RESEND] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish
Posted by gaoliming 3 years, 2 months ago
Abner:
  I have two comments for this patch. 

1.  Please specify new ASSERT in the function header. 
2.  Please update the function description for the new behavior when
TryBestLanguage is FALSE. HiiGetStringEx() function description should be
different from HiiGetString().

Thanks
Liming
> -----邮件原件-----
> 发件人: bounce+27952+70832+4905953+8761045@groups.io
> <bounce+27952+70832+4905953+8761045@groups.io> 代表 Abner Chang
> 发送时间: 2021年1月28日 8:59
> 收件人: devel@edk2.groups.io
> 抄送: Dandan Bi <dandan.bi@intel.com>; Eric Dong <eric.dong@intel.com>;
> Nickle Wang <nickle.wang@hpe.com>
> 主题: [edk2-devel] [PATCH v2 RESEND] 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       | 41 ++++++++++-
>  MdeModulePkg/Library/UefiHiiLib/HiiString.c | 79 ++++++++++++++++-----
>  2 files changed, 101 insertions(+), 19 deletions(-)
> 
> diff --git a/MdeModulePkg/Include/Library/HiiLib.h
> b/MdeModulePkg/Include/Library/HiiLib.h
> index c475cb74a1..14dcc3b5b6 100644
> --- a/MdeModulePkg/Include/Library/HiiLib.h
> +++ b/MdeModulePkg/Include/Library/HiiLib.h
> @@ -1,7 +1,7 @@
>  /** @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>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -152,8 +152,43 @@ 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.  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.
> +
> +  @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..2d6c9968ba 100644
> --- a/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> +++ b/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> @@ -1,7 +1,7 @@
>  /** @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>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -220,6 +220,45 @@ 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.  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.
> +
> +  @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 +270,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 +303,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 +384,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 (#70996): https://edk2.groups.io/g/devel/message/70996
Mute This Topic: https://groups.io/mt/80274827/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v2 RESEND] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish
Posted by Abner Chang 3 years, 2 months ago
Thanks for catching this. V3 sent.

Abner

> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> gaoliming
> Sent: Monday, February 1, 2021 10:12 AM
> To: devel@edk2.groups.io; Chang, Abner (HPS SW/FW Technologist)
> <abner.chang@hpe.com>
> Cc: 'Dandan Bi' <dandan.bi@intel.com>; 'Eric Dong' <eric.dong@intel.com>;
> Wang, Nickle (HPS SW) <nickle.wang@hpe.com>
> Subject: 回复: [edk2-devel] [PATCH v2 RESEND] MdeModulePkg/Library:
> Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish
> 
> Abner:
>   I have two comments for this patch.
> 
> 1.  Please specify new ASSERT in the function header.
> 2.  Please update the function description for the new behavior when
> TryBestLanguage is FALSE. HiiGetStringEx() function description should be
> different from HiiGetString().
> 
> Thanks
> Liming
> > -----邮件原件-----
> > 发件人: bounce+27952+70832+4905953+8761045@groups.io
> > <bounce+27952+70832+4905953+8761045@groups.io> 代表 Abner Chang
> > 发送时间: 2021年1月28日 8:59
> > 收件人: devel@edk2.groups.io
> > 抄送: Dandan Bi <dandan.bi@intel.com>; Eric Dong <eric.dong@intel.com>;
> > Nickle Wang <nickle.wang@hpe.com>
> > 主题: [edk2-devel] [PATCH v2 RESEND] 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       | 41 ++++++++++-
> >  MdeModulePkg/Library/UefiHiiLib/HiiString.c | 79
> > ++++++++++++++++-----
> >  2 files changed, 101 insertions(+), 19 deletions(-)
> >
> > diff --git a/MdeModulePkg/Include/Library/HiiLib.h
> > b/MdeModulePkg/Include/Library/HiiLib.h
> > index c475cb74a1..14dcc3b5b6 100644
> > --- a/MdeModulePkg/Include/Library/HiiLib.h
> > +++ b/MdeModulePkg/Include/Library/HiiLib.h
> > @@ -1,7 +1,7 @@
> >  /** @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>
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  **/
> > @@ -152,8 +152,43 @@ 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.
> > +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.
> > +
> > +  @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..2d6c9968ba 100644
> > --- a/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> > +++ b/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> > @@ -1,7 +1,7 @@
> >  /** @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>
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  **/
> > @@ -220,6 +220,45 @@ 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.
> > +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.
> > +
> > +  @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 +270,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 +303,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 +384,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 (#71002): https://edk2.groups.io/g/devel/message/71002
Mute This Topic: https://groups.io/mt/80276933/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-