14983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey/** @file 24983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Library used for sorting routines. 34983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 4ae591c14b333757a33768e80481bc301b8855686Daryl McDaniel Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved. <BR> 51e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey This program and the accompanying materials 61e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey are licensed and made available under the terms and conditions of the BSD License 71e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey which accompanies this distribution. The full text of the license may be found at 81e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey http://opensource.org/licenses/bsd-license.php 94983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 101e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 111e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 124983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 134983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey**/ 144983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey#include <Uefi.h> 154983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 164983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey#include <Library/BaseLib.h> 174983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey#include <Library/BaseMemoryLib.h> 184983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey#include <Library/DebugLib.h> 194983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey#include <Library/MemoryAllocationLib.h> 201e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey#include <Library/SortLib.h> 214983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 224983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey/** 231e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey Worker function for QuickSorting. This function is identical to PerformQuickSort, 241e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey except that is uses the pre-allocated buffer so the in place sorting does not need to 254983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey allocate and free buffers constantly. 264983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 274983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Each element must be equal sized. 284983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 294983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if BufferToSort is NULL, then ASSERT. 304983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if CompareFunction is NULL, then ASSERT. 314983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if Buffer is NULL, then ASSERT. 324983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 334983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if Count is < 2 then perform no action. 344983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if Size is < 1 then perform no action. 354983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 364ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in, out] BufferToSort on call a Buffer of (possibly sorted) elements 374ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong on return a buffer of sorted elements 384ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] Count the number of elements in the buffer to sort 394ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] ElementSize Size of an element in bytes 404ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] CompareFunction The function to call to perform the comparison 414ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong of any 2 elements 424ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] Buffer Buffer of size ElementSize for use in swapping 434983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey**/ 444983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarseyVOID 454983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarseyEFIAPI 464983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarseyQuickSortWorker ( 474983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN OUT VOID *BufferToSort, 484983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN CONST UINTN Count, 494983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN CONST UINTN ElementSize, 504983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN SORT_COMPARE CompareFunction, 514983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN VOID *Buffer 52125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey ) 53125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey{ 544983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey VOID *Pivot; 554983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey UINTN LoopCount; 564983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey UINTN NextSwapLocation; 574983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 584983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ASSERT(BufferToSort != NULL); 594983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ASSERT(CompareFunction != NULL); 604983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ASSERT(Buffer != NULL); 614983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 621e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey if ( Count < 2 634983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey || ElementSize < 1 64a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ){ 654983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey return; 664983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey } 674983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 684983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey NextSwapLocation = 0; 694983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 704983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 714983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // pick a pivot (we choose last element) 724983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 734983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Pivot = ((UINT8*)BufferToSort+((Count-1)*ElementSize)); 744983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 754983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 764983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // Now get the pivot such that all on "left" are below it 774983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // and everything "right" are above it 784983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 794983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey for ( LoopCount = 0 801e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey ; LoopCount < Count -1 814983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ; LoopCount++ 82a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ){ 834983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 844983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // if the element is less than the pivot 854983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 864983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if (CompareFunction((VOID*)((UINT8*)BufferToSort+((LoopCount)*ElementSize)),Pivot) <= 0){ 874983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 881e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey // swap 894983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 904983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CopyMem (Buffer, (UINT8*)BufferToSort+(NextSwapLocation*ElementSize), ElementSize); 914983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CopyMem ((UINT8*)BufferToSort+(NextSwapLocation*ElementSize), (UINT8*)BufferToSort+((LoopCount)*ElementSize), ElementSize); 924983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CopyMem ((UINT8*)BufferToSort+((LoopCount)*ElementSize), Buffer, ElementSize); 934983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 944983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 954983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // increment NextSwapLocation 961e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey // 974983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey NextSwapLocation++; 984983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey } 994983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey } 1004983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 1014983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // swap pivot to it's final position (NextSwapLocaiton) 1024983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 1034983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CopyMem (Buffer, Pivot, ElementSize); 1044983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CopyMem (Pivot, (UINT8*)BufferToSort+(NextSwapLocation*ElementSize), ElementSize); 1054983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CopyMem ((UINT8*)BufferToSort+(NextSwapLocation*ElementSize), Buffer, ElementSize); 1064983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1074983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 1081e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey // Now recurse on 2 paritial lists. neither of these will have the 'pivot' element 1094983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // IE list is sorted left half, pivot element, sorted right half... 1104983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey // 1115dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey if (NextSwapLocation >= 2) { 1125dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey QuickSortWorker( 1135dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey BufferToSort, 1145dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey NextSwapLocation, 1155dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey ElementSize, 1165dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey CompareFunction, 1175dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey Buffer); 1185dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey } 1194983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1205dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey if ((Count - NextSwapLocation - 1) >= 2) { 1215dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey QuickSortWorker( 1225dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey (UINT8 *)BufferToSort + (NextSwapLocation+1) * ElementSize, 1235dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey Count - NextSwapLocation - 1, 1245dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey ElementSize, 1255dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey CompareFunction, 1265dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey Buffer); 1275dcb5355127fc8fe3a44ec4416932925f1bd9310jcarsey } 1284983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey return; 1294983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey} 1304983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey/** 1314983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Function to perform a Quick Sort alogrithm on a buffer of comparable elements. 1324983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1334983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Each element must be equal sized. 1344983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1354983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if BufferToSort is NULL, then ASSERT. 1364983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if CompareFunction is NULL, then ASSERT. 1374983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1384983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if Count is < 2 then perform no action. 1394983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey if Size is < 1 then perform no action. 1404983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1414ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in, out] BufferToSort on call a Buffer of (possibly sorted) elements 1424ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong on return a buffer of sorted elements 1434ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] Count the number of elements in the buffer to sort 1444ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] ElementSize Size of an element in bytes 1454ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong @param[in] CompareFunction The function to call to perform the comparison 1464ff7e37b4f7e336a8ecb7080b8f48eef4b52d396ydong of any 2 elements 1474983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey**/ 1484983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarseyVOID 1494983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarseyEFIAPI 1504983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarseyPerformQuickSort ( 1514983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN OUT VOID *BufferToSort, 1524983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN CONST UINTN Count, 1534983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN CONST UINTN ElementSize, 1544983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey IN SORT_COMPARE CompareFunction 155125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey ) 156125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey{ 1574983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey VOID *Buffer; 1584983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1594983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ASSERT(BufferToSort != NULL); 1604983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ASSERT(CompareFunction != NULL); 1614983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1625a0fe66eda4a187724b0eb9d660ab21296178af5jcarsey Buffer = AllocateZeroPool(ElementSize); 1634983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ASSERT(Buffer != NULL); 1644983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1654983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey QuickSortWorker( 1664983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey BufferToSort, 1674983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Count, 1684983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey ElementSize, 1694983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey CompareFunction, 1704983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey Buffer); 1714983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey 1724983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey FreePool(Buffer); 1734983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey return; 1744983ca934c85ed80b15264d3a7ee10a4d3c0d51fjcarsey} 175125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey 176125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey/** 177125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey Not supported in Base version. 1781e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey 179a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] Buffer1 Ignored. 180a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] Buffer2 Ignored. 181a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 182125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey ASSERT and return 0. 183125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey**/ 184125c2cf4f152760920ee4b1e5d73e03daf02d394jcarseyINTN 18521ecdf15a01ed8a2adce55a31fa0bee9ed8eb061kluEFIAPI 186125c2cf4f152760920ee4b1e5d73e03daf02d394jcarseyDevicePathCompare ( 187b3011f40417e12cadf8840d095c590c68f0868a2jcarsey IN CONST VOID *Buffer1, 188b3011f40417e12cadf8840d095c590c68f0868a2jcarsey IN CONST VOID *Buffer2 189125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey ) 190125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey{ 191125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey ASSERT(FALSE); 192125c2cf4f152760920ee4b1e5d73e03daf02d394jcarsey return 0; 193703289677ace8035d76176e789a136057926ae77jcarsey} 19411d2decf8103dc94c131c7aedcd54408a3abad97jcarsey 19511d2decf8103dc94c131c7aedcd54408a3abad97jcarsey/** 19611d2decf8103dc94c131c7aedcd54408a3abad97jcarsey Function to compare 2 strings without regard to case of the characters. 19711d2decf8103dc94c131c7aedcd54408a3abad97jcarsey 19811d2decf8103dc94c131c7aedcd54408a3abad97jcarsey @param[in] Buffer1 Pointer to String to compare. 19911d2decf8103dc94c131c7aedcd54408a3abad97jcarsey @param[in] Buffer2 Pointer to second String to compare. 20011d2decf8103dc94c131c7aedcd54408a3abad97jcarsey 20111d2decf8103dc94c131c7aedcd54408a3abad97jcarsey @retval 0 Buffer1 equal to Buffer2. 20211d2decf8103dc94c131c7aedcd54408a3abad97jcarsey @return < 0 Buffer1 is less than Buffer2. 2031e6e84c7afd435db6e84ad84e71ddecdc9866042jcarsey @return > 0 Buffer1 is greater than Buffer2. 20411d2decf8103dc94c131c7aedcd54408a3abad97jcarsey**/ 20511d2decf8103dc94c131c7aedcd54408a3abad97jcarseyINTN 20611d2decf8103dc94c131c7aedcd54408a3abad97jcarseyEFIAPI 20711d2decf8103dc94c131c7aedcd54408a3abad97jcarseyStringNoCaseCompare ( 208b3011f40417e12cadf8840d095c590c68f0868a2jcarsey IN CONST VOID *Buffer1, 209b3011f40417e12cadf8840d095c590c68f0868a2jcarsey IN CONST VOID *Buffer2 21011d2decf8103dc94c131c7aedcd54408a3abad97jcarsey ) 21111d2decf8103dc94c131c7aedcd54408a3abad97jcarsey{ 21211d2decf8103dc94c131c7aedcd54408a3abad97jcarsey ASSERT(FALSE); 21311d2decf8103dc94c131c7aedcd54408a3abad97jcarsey return 0; 21411d2decf8103dc94c131c7aedcd54408a3abad97jcarsey} 21511d2decf8103dc94c131c7aedcd54408a3abad97jcarsey 21611d2decf8103dc94c131c7aedcd54408a3abad97jcarsey 217a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey/** 218a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Function to compare 2 strings. 219a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 220a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] Buffer1 Pointer to String to compare (CHAR16**). 221a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] Buffer2 Pointer to second String to compare (CHAR16**). 222a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 223a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @retval 0 Buffer1 equal to Buffer2. 224a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @return < 0 Buffer1 is less than Buffer2. 225a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @return > 0 Buffer1 is greater than Buffer2. 226a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey**/ 227a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyINTN 228a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyEFIAPI 229a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyStringCompare ( 230a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey IN CONST VOID *Buffer1, 231a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey IN CONST VOID *Buffer2 232a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ) 233a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey{ 234a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT(FALSE); 235a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey return 0; 236a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey} 237a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 238a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 239