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