From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web08.5062.1633322798134549616 for ; Sun, 03 Oct 2021 21:46:38 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: ianx.kuo@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10126"; a="225602893" X-IronPort-AV: E=Sophos;i="5.85,344,1624345200"; d="scan'208";a="225602893" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Oct 2021 21:46:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,344,1624345200"; d="scan'208";a="621557276" Received: from ikuox-desk1.gar.corp.intel.com ([10.227.107.18]) by fmsmga001.fm.intel.com with ESMTP; 03 Oct 2021 21:46:35 -0700 From: "IanX Kuo" To: devel@edk2.groups.io Cc: amy.chan@intel.com, ray.ni@intel.com, IanX Kuo , Jiewen Yao , Jian J Wang , Xiaoyu Lu , Guomin Jiang Subject: [PATCH v4 3/4] CryptoPkg/CryptLib: Add QuickSort function on BaseLib Date: Mon, 4 Oct 2021 12:46:26 +0800 Message-Id: <20211004044627.1810-4-ianx.kuo@intel.com> X-Mailer: git-send-email 2.30.0.windows.1 In-Reply-To: <20211004044627.1810-1-ianx.kuo@intel.com> References: <20211004044627.1810-1-ianx.kuo@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: IanX Kuo REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3675 Use QuickSort instead of QuickSortWorker Cc: Ray Ni Cc: Jiewen Yao Cc: Jian J Wang Cc: Xiaoyu Lu Cc: Guomin Jiang Signed-off-by: IanX Kuo --- .../Library/BaseCryptLib/SysCall/CrtWrapper.c | 92 +------------------ 1 file changed, 2 insertions(+), 90 deletions(-) diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c b/CryptoPk= g/Library/BaseCryptLib/SysCall/CrtWrapper.c index 42235ab96a..bdcd8ec278 100644 --- a/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c +++ b/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c @@ -2,7 +2,7 @@ C Run-Time Libraries (CRT) Wrapper Implementation for OpenSSL-based=0D Cryptographic Library.=0D =0D -Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
=0D +Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.
=0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D =0D **/=0D @@ -22,91 +22,6 @@ int IN VOID *Buffer2=0D );=0D =0D -//=0D -// Duplicated from EDKII BaseSortLib for qsort() wrapper=0D -//=0D -STATIC=0D -VOID=0D -QuickSortWorker (=0D - IN OUT VOID *BufferToSort,=0D - IN CONST UINTN Count,=0D - IN CONST UINTN ElementSize,=0D - IN SORT_COMPARE CompareFunction,=0D - IN VOID *Buffer=0D - )=0D -{=0D - VOID *Pivot;=0D - UINTN LoopCount;=0D - UINTN NextSwapLocation;=0D -=0D - ASSERT(BufferToSort !=3D NULL);=0D - ASSERT(CompareFunction !=3D NULL);=0D - ASSERT(Buffer !=3D NULL);=0D -=0D - if (Count < 2 || ElementSize < 1) {=0D - return;=0D - }=0D -=0D - NextSwapLocation =3D 0;=0D -=0D - //=0D - // Pick a pivot (we choose last element)=0D - //=0D - Pivot =3D ((UINT8 *)BufferToSort + ((Count - 1) * ElementSize));=0D -=0D - //=0D - // Now get the pivot such that all on "left" are below it=0D - // and everything "right" are above it=0D - //=0D - for (LoopCount =3D 0; LoopCount < Count - 1; LoopCount++)=0D - {=0D - //=0D - // If the element is less than the pivot=0D - //=0D - if (CompareFunction ((VOID *)((UINT8 *)BufferToSort + ((LoopCount) * E= lementSize)), Pivot) <=3D 0) {=0D - //=0D - // Swap=0D - //=0D - CopyMem (Buffer, (UINT8 *)BufferToSort + (NextSwapLocation * Element= Size), ElementSize);=0D - CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), (= UINT8 *)BufferToSort + ((LoopCount) * ElementSize), ElementSize);=0D - CopyMem ((UINT8 *)BufferToSort + ((LoopCount) * ElementSize), Buffer= , ElementSize);=0D -=0D - //=0D - // Increment NextSwapLocation=0D - //=0D - NextSwapLocation++;=0D - }=0D - }=0D - //=0D - // Swap pivot to its final position (NextSwapLocation)=0D - //=0D - CopyMem (Buffer, Pivot, ElementSize);=0D - CopyMem (Pivot, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize)= , ElementSize);=0D - CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), Buffe= r, ElementSize);=0D -=0D - //=0D - // Now recurse on 2 partial lists. Neither of these will have the 'pivo= t' element.=0D - // IE list is sorted left half, pivot element, sorted right half...=0D - //=0D - QuickSortWorker (=0D - BufferToSort,=0D - NextSwapLocation,=0D - ElementSize,=0D - CompareFunction,=0D - Buffer=0D - );=0D -=0D - QuickSortWorker (=0D - (UINT8 *)BufferToSort + (NextSwapLocation + 1) * ElementSize,=0D - Count - NextSwapLocation - 1,=0D - ElementSize,=0D - CompareFunction,=0D - Buffer=0D - );=0D -=0D - return;=0D -}=0D -=0D //---------------------------------------------------------=0D // Standard C Run-time Library Interface Wrapper=0D //---------------------------------------------------------=0D @@ -337,10 +252,7 @@ void qsort (void *base, size_t num, size_t width, int = (*compare)(const void *, c Buffer =3D malloc (width);=0D ASSERT (Buffer !=3D NULL);=0D =0D - //=0D - // Re-use PerformQuickSort() function Implementation in EDKII BaseSortLi= b.=0D - //=0D - QuickSortWorker (base, (UINTN)num, (UINTN)width, (SORT_COMPARE)compare, = Buffer);=0D + QuickSort (base, (UINTN)num, (UINTN)width, (SORT_COMPARE)compare, Buffer= );=0D =0D free (Buffer);=0D return;=0D --=20 2.30.0.windows.1