From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: solarflare.com, ip: 148.163.129.52, mailfrom: tzhao@solarflare.com) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by groups.io with SMTP; Mon, 02 Sep 2019 01:28:10 -0700 X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us4.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id E623880063; Mon, 2 Sep 2019 08:28:07 +0000 (UTC) Received: from [10.17.20.221] (10.17.20.221) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 2 Sep 2019 09:28:00 +0100 Subject: Re: [edk2-devel] [PATCH v2 1/1] MdePkg: UefiLib: Add a function to check if a language is supported To: , CC: "Kinney, Michael D" References: <7fd22bc9-2a47-6e04-8541-fb73577f0cc0@solarflare.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E4F01CC@SHSMSX104.ccr.corp.intel.com> From: "Tom Zhao" Message-ID: Date: Mon, 2 Sep 2019 09:27:56 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E4F01CC@SHSMSX104.ccr.corp.intel.com> X-Originating-IP: [10.17.20.221] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24884.003 X-TM-AS-Result: No-18.260200-8.000000-10 X-TMASE-MatchedRID: TmlY9+XBoTm8rRvefcjeTTcodIZPkEsfSWg+u4ir2NOfFw2oUwRr60fl +H4+MqTJsPrO1rOlgWnWogTgJ+knjCkm5PRe6fZWWTGejGdB9VJkAa0IkTbdiNNXOy0pXgUhLki lnYvsir2b7V+9g2EXII9bHfxDWoibScc3TMVaAva0pHkVd9vKzIeAPCkZqxntDO+DX+rUwfbbbi 55eq0ou3QJpJzYdEh75r+L0dHMjR+b6XtTE4EZZPVY7U3NX8JgUd7Bjfo+5jTfeUZ02qF20mHcc QC5M+QDOJGqUU7s8CFLqcIPRwhVQMjZGpIBeHfeLfggThkKF7Y1X1Ls767cpgaYevV4zG3ZQBzo PKhLasiOpDzbLLUjtG/vZ/TQCHA02Q9WnckGdj6EeJva4+0wXZ4oEP/S42Q2pWrzBwH/R9PnPnh 0/4h2vLI7AtLQZRsYfJo0VGC2zVjV824V7mlue7FPNlLHkDO0fS0Ip2eEHny+qryzYw2E8LLn+0 Vm71Lc3t//bkkogL4RCvpGs2saMn8DvkUabErVKrauXd3MZDUMFsa+1wyh/DYa42gv/bLgr1sU6 ismQHftxHMDX7/LLOVqAAflGGl6bPYU9m0JZ5Y= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--18.260200-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24884.003 X-MDID: 1567412889-PE9CmBK5_wcC Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Language: en-US Hi Liming The IsLanguageSupported() is intended for use in implementations of UEFI Driver Model protocols. The protocol functions that will likely use this are ones where the specification requires a language check, such as EFI_DRIVER_DIAGNOSTIC2_PROTOCOL.RunDiagnostics(). Currently, to check if a language is supported using the API we must do extra work and retrieve the actual string, however, in many cases this string would just be thrown away later. Tom On 02/09/2019 04:13, Liming Gao wrote: > Tom: > New API IsLanguageSupported() only supports RFC 4646 language code for the Unicode string. > If you think ISO 639-2 language code is obsolete, and don't plan to support it any longer. Please > update IsLanguageSupported() function description to clarify this API for RFC 4646 language code. > > And, I still want to know what other usage model for this new API IsLanguageSupported(). For example, > how UEFI HII driver consumes this API? If this API is only used in UefiLib, it can be the internal function > in UefiLib library instance. > > Thanks > Liming >> -----Original Message----- >> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Tom Zhao >> Sent: Friday, August 30, 2019 7:34 PM >> To: devel@edk2.groups.io >> Cc: Gao, Liming ; Kinney, Michael D >> Subject: [edk2-devel] [PATCH v2 1/1] MdePkg: UefiLib: Add a function to check if a language is supported >> >> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=2100 >> >> Add a function that checks if a target language is in the supported >> languages list. Refactor UefiLib to use this function where appropriate >> internally. >> >> Cc: Michael D Kinney >> Cc: Liming Gao >> Signed-off-by: Tom Zhao >> --- >> MdePkg/Include/Library/UefiLib.h | 16 ++++++ >> MdePkg/Library/UefiLib/UefiLib.c | 59 +++++++++++++------- >> 2 files changed, 54 insertions(+), 21 deletions(-) >> >> diff --git a/MdePkg/Include/Library/UefiLib.h >> b/MdePkg/Include/Library/UefiLib.h >> index 1650f30ddbc6..9dd170cbe2bf 100644 >> --- a/MdePkg/Include/Library/UefiLib.h >> +++ b/MdePkg/Include/Library/UefiLib.h >> @@ -461,6 +461,22 @@ EfiTestChildHandle ( >> IN CONST EFI_GUID *ProtocolGuid >> ); >> +/** >> + * This function checks the supported languages list for a target language >> + * >> + * @param SupportedLanguages The supported languages >> + * @param TargetLanguage The target language >> + * >> + * @return Returns EFI_SUCCESS if the language is supported, >> + * EFI_UNSUPPORTED otherwise >> + */ >> +EFI_STATUS >> +EFIAPI >> +IsLanguageSupported ( >> + IN CONST CHAR8 *SupportedLanguages, >> + IN CONST CHAR8 *TargetLanguage >> + ); >> + >> /** >> This function looks up a Unicode string in UnicodeStringTable. >> diff --git a/MdePkg/Library/UefiLib/UefiLib.c >> b/MdePkg/Library/UefiLib/UefiLib.c >> index daa4af762e62..56281d25fd99 100644 >> --- a/MdePkg/Library/UefiLib/UefiLib.c >> +++ b/MdePkg/Library/UefiLib/UefiLib.c >> @@ -640,6 +640,35 @@ EfiTestChildHandle ( >> return Status; >> } >> +/** >> + * This function checks the supported languages list for a target language >> + * >> + * @param SupportedLanguages The supported languages >> + * @param TargetLanguage The target language >> + * >> + * @return Returns EFI_SUCCESS if the language is supported, >> + * EFI_UNSUPPORTED otherwise >> + */ >> +EFI_STATUS >> +EFIAPI >> +IsLanguageSupported ( >> + IN CONST CHAR8 *SupportedLanguages, >> + IN CONST CHAR8 *TargetLanguage >> + ) >> +{ >> + UINTN Index; >> + while (*SupportedLanguages != 0) { >> + for (Index = 0; SupportedLanguages[Index] != 0 && >> SupportedLanguages[Index] != ';'; Index++); >> + if ((AsciiStrnCmp(SupportedLanguages, TargetLanguage, Index) == 0) >> && (TargetLanguage[Index] == 0)) { >> + return EFI_SUCCESS; >> + } >> + SupportedLanguages += Index; >> + for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; >> SupportedLanguages++); >> + } >> + >> + return EFI_UNSUPPORTED; >> +} >> + >> /** >> This function looks up a Unicode string in UnicodeStringTable. >> @@ -800,24 +829,19 @@ LookupUnicodeString2 ( >> // Make sure Language is in the set of Supported Languages >> // >> Found = FALSE; >> - while (*SupportedLanguages != 0) { >> - if (Iso639Language) { >> + if (Iso639Language) { >> + while (*SupportedLanguages != 0) { >> if (CompareIso639LanguageCode (Language, SupportedLanguages)) { >> Found = TRUE; >> break; >> } >> SupportedLanguages += 3; >> - } else { >> - for (Index = 0; SupportedLanguages[Index] != 0 && >> SupportedLanguages[Index] != ';'; Index++); >> - if ((AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) && >> (Language[Index] == 0)) { >> - Found = TRUE; >> - break; >> - } >> - SupportedLanguages += Index; >> - for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; >> SupportedLanguages++); >> } >> + } else { >> + Found = !IsLanguageSupported(Language, SupportedLanguages); >> } >> + >> // >> // If Language is not a member of SupportedLanguages, then return >> EFI_UNSUPPORTED >> // >> @@ -1099,24 +1123,17 @@ AddUnicodeString2 ( >> // Make sure Language is a member of SupportedLanguages >> // >> Found = FALSE; >> - while (*SupportedLanguages != 0) { >> - if (Iso639Language) { >> + if (Iso639Language) { >> + while (*SupportedLanguages != 0) { >> if (CompareIso639LanguageCode (Language, SupportedLanguages)) { >> Found = TRUE; >> break; >> } >> SupportedLanguages += 3; >> - } else { >> - for (Index = 0; SupportedLanguages[Index] != 0 && >> SupportedLanguages[Index] != ';'; Index++); >> - if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) { >> - Found = TRUE; >> - break; >> - } >> - SupportedLanguages += Index; >> - for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; >> SupportedLanguages++); >> } >> + } else { >> + Found = !IsLanguageSupported(Language, SupportedLanguages); >> } >> - >> // >> // If Language is not a member of SupportedLanguages, then return >> EFI_UNSUPPORTED >> // >> -- >> 2.21.0 >> >> >> > > >