From nobody Mon Dec 23 15:10:14 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1516960288004170.02291024000021; Fri, 26 Jan 2018 01:51:28 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id DD74E2238B5A7; Fri, 26 Jan 2018 01:45:54 -0800 (PST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 813EA2236BAB3 for ; Fri, 26 Jan 2018 01:45:52 -0800 (PST) Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Jan 2018 01:51:22 -0800 Received: from ray-dev.ccr.corp.intel.com ([10.239.9.19]) by orsmga007.jf.intel.com with ESMTP; 26 Jan 2018 01:51:21 -0800 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,415,1511856000"; d="scan'208";a="12771699" From: Ruiyu Ni To: edk2-devel@lists.01.org Date: Fri, 26 Jan 2018 17:51:16 +0800 Message-Id: <20180126095117.3328-2-ruiyu.ni@intel.com> X-Mailer: git-send-email 2.15.1.windows.2 In-Reply-To: <20180126095117.3328-1-ruiyu.ni@intel.com> References: <20180126095117.3328-1-ruiyu.ni@intel.com> Subject: [edk2] [PATCH 1/2] ShellPkg/CommandLib: Locate proper UnicodeCollation instance X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jaben Carsey MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Original code locates the first UnicodeCollation instance in DXE Core protocol database. It's not correct considering multiple UnicodeCollation instances exist in system. The patch changes logic to find the one that matches the current system language. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni Cc: Jaben Carsey --- .../UefiShellCommandLib/UefiShellCommandLib.c | 76 ++++++++++++++++++= ---- .../UefiShellCommandLib/UefiShellCommandLib.h | 3 +- 2 files changed, 67 insertions(+), 12 deletions(-) diff --git a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c b/S= hellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c index c7984f11b2..0df252b420 100644 --- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c +++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c @@ -1,7 +1,7 @@ /** @file Provides interface to shell internal functions for shell commands. =20 - Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
(C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
=20 @@ -72,14 +72,70 @@ CommandInit( VOID ) { - EFI_STATUS Status; + UINTN NumHandles; + EFI_HANDLE *Handles; + EFI_UNICODE_COLLATION_PROTOCOL *Uc; + CHAR8 *BestLanguage; + UINTN Index; + EFI_STATUS Status; + CHAR8 *PlatformLang; + =20 + GetEfiGlobalVariable2 (EFI_PLATFORM_LANG_VARIABLE_NAME, (VOID**)&Platfor= mLang, NULL); + if (PlatformLang =3D=3D NULL) { + return EFI_UNSUPPORTED; + } + if (gUnicodeCollation =3D=3D NULL) { - Status =3D gBS->LocateProtocol(&gEfiUnicodeCollation2ProtocolGuid, NUL= L, (VOID**)&gUnicodeCollation); - if (EFI_ERROR(Status)) { - return (EFI_DEVICE_ERROR); + Status =3D gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiUnicodeCollation2ProtocolGuid, + NULL, + &NumHandles, + &Handles + ); + if (EFI_ERROR (Status)) { + NumHandles =3D 0; + Handles =3D NULL; } + for (Index =3D 0; Index < NumHandles; Index++) { + // + // Open Unicode Collation Protocol + // + Status =3D gBS->OpenProtocol ( + Handles[Index], + &gEfiUnicodeCollation2ProtocolGuid, + (VOID **) &Uc, + gImageHandle, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (EFI_ERROR (Status)) { + continue; + } + + // + // Find the best matching matching language from the supported langu= ages + // of Unicode Collation2 protocol.=20 + // + BestLanguage =3D GetBestLanguage ( + Uc->SupportedLanguages, + FALSE, + PlatformLang, + NULL + ); + if (BestLanguage !=3D NULL) { + FreePool (BestLanguage); + gUnicodeCollation =3D Uc; + break; + } + } + if (Handles !=3D NULL) { + FreePool (Handles); + } + FreePool (PlatformLang); } - return (EFI_SUCCESS); + + return (gUnicodeCollation =3D=3D NULL) ? EFI_UNSUPPORTED : EFI_SUCCESS; } =20 /** @@ -112,11 +168,9 @@ ShellCommandLibConstructor ( mProfileListSize =3D 0; mProfileList =3D NULL; =20 - if (gUnicodeCollation =3D=3D NULL) { - Status =3D gBS->LocateProtocol(&gEfiUnicodeCollation2ProtocolGuid, NUL= L, (VOID**)&gUnicodeCollation); - if (EFI_ERROR(Status)) { - return (EFI_DEVICE_ERROR); - } + Status =3D CommandInit (); + if (EFI_ERROR (Status)) { + return EFI_DEVICE_ERROR; } =20 return (RETURN_SUCCESS); diff --git a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.h b/S= hellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.h index b998656b4e..bcfde60c26 100644 --- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.h +++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.h @@ -1,7 +1,7 @@ /** @file Provides interface to shell internal functions for shell commands. =20 - Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
This program and the accompanying materials are licensed and made available under the terms and conditions of the BS= D License @@ -19,6 +19,7 @@ #include =20 #include +#include =20 #include #include --=20 2.15.1.windows.2 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel