mirror of https://github.com/acidanthera/audk.git
Adding StringNoCaseCompare to SortLib
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9535 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
3a5ac5bff0
commit
11d2decf81
|
@ -63,16 +63,35 @@ PerformQuickSort (
|
|||
/**
|
||||
Function to compare 2 device paths for use as CompareFunction.
|
||||
|
||||
@param[in] Buffer1 pointer to Device Path to compare
|
||||
@param[in] Buffer2 pointer to second DevicePath to compare
|
||||
@param[in] Buffer1 Pointer to Device Path to compare.
|
||||
@param[in] Buffer2 Pointer to second DevicePath to compare.
|
||||
|
||||
@retval 0 Buffer1 equal to Buffer2
|
||||
@return < 0 Buffer1 is less than Buffer2
|
||||
@return > 0 Buffer1 is greater than Buffer2
|
||||
@retval 0 Buffer1 equal to Buffer2.
|
||||
@return < 0 Buffer1 is less than Buffer2.
|
||||
@return > 0 Buffer1 is greater than Buffer2.
|
||||
**/
|
||||
INTN
|
||||
EFIAPI
|
||||
DevicePathCompare (
|
||||
IN VOID *Buffer1,
|
||||
IN VOID *Buffer2
|
||||
);
|
||||
|
||||
/**
|
||||
Function to compare 2 strings without regard to case of the characters.
|
||||
|
||||
@param[in] Buffer1 Pointer to String to compare (CHAR16**).
|
||||
@param[in] Buffer2 Pointer to second String to compare (CHAR16**).
|
||||
|
||||
@retval 0 Buffer1 equal to Buffer2.
|
||||
@return < 0 Buffer1 is less than Buffer2.
|
||||
@return > 0 Buffer1 is greater than Buffer2.
|
||||
**/
|
||||
INTN
|
||||
EFIAPI
|
||||
StringNoCaseCompare (
|
||||
IN VOID *Buffer1,
|
||||
IN VOID *Buffer2
|
||||
);
|
||||
|
||||
#endif //__SORT_LIB_H__
|
||||
|
|
|
@ -185,3 +185,26 @@ DevicePathCompare (
|
|||
ASSERT(FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
Function to compare 2 strings without regard to case of the characters.
|
||||
|
||||
@param[in] Buffer1 Pointer to String to compare.
|
||||
@param[in] Buffer2 Pointer to second String to compare.
|
||||
|
||||
@retval 0 Buffer1 equal to Buffer2.
|
||||
@return < 0 Buffer1 is less than Buffer2.
|
||||
@return > 0 Buffer1 is greater than Buffer2.
|
||||
**/
|
||||
INTN
|
||||
EFIAPI
|
||||
StringNoCaseCompare (
|
||||
IN VOID *Buffer1,
|
||||
IN VOID *Buffer2
|
||||
)
|
||||
{
|
||||
ASSERT(FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,6 +25,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/SortLib.h>
|
||||
|
||||
STATIC EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *mDevicePathToText = NULL;
|
||||
STATIC EFI_UNICODE_COLLATION_PROTOCOL *mUnicodeCollation = NULL;
|
||||
|
||||
|
||||
/**
|
||||
Worker function for QuickSorting. This function is identical to PerformQuickSort,
|
||||
except that is uses the pre-allocated buffer so the in place sorting does not need to
|
||||
|
@ -199,9 +203,6 @@ DevicePathCompare (
|
|||
EFI_STATUS Status;
|
||||
INTN RetVal;
|
||||
|
||||
STATIC EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevicePathToText = NULL;
|
||||
STATIC EFI_UNICODE_COLLATION_PROTOCOL *UnicodeCollation = NULL;
|
||||
|
||||
DevicePath1 = *(EFI_DEVICE_PATH_PROTOCOL**)Buffer1;
|
||||
DevicePath2 = *(EFI_DEVICE_PATH_PROTOCOL**)Buffer2;
|
||||
|
||||
|
@ -217,36 +218,36 @@ DevicePathCompare (
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (DevicePathToText == NULL) {
|
||||
if (mDevicePathToText == NULL) {
|
||||
Status = gBS->LocateProtocol(
|
||||
&gEfiDevicePathToTextProtocolGuid,
|
||||
NULL,
|
||||
(VOID**)&DevicePathToText);
|
||||
(VOID**)&mDevicePathToText);
|
||||
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
}
|
||||
|
||||
if (UnicodeCollation == NULL) {
|
||||
if (mUnicodeCollation == NULL) {
|
||||
Status = gBS->LocateProtocol(
|
||||
&gEfiUnicodeCollation2ProtocolGuid,
|
||||
NULL,
|
||||
(VOID**)&UnicodeCollation);
|
||||
(VOID**)&mUnicodeCollation);
|
||||
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
}
|
||||
|
||||
TextPath1 = DevicePathToText->ConvertDevicePathToText(
|
||||
TextPath1 = mDevicePathToText->ConvertDevicePathToText(
|
||||
DevicePath1,
|
||||
FALSE,
|
||||
FALSE);
|
||||
|
||||
TextPath2 = DevicePathToText->ConvertDevicePathToText(
|
||||
TextPath2 = mDevicePathToText->ConvertDevicePathToText(
|
||||
DevicePath2,
|
||||
FALSE,
|
||||
FALSE);
|
||||
|
||||
RetVal = UnicodeCollation->StriColl(
|
||||
UnicodeCollation,
|
||||
RetVal = mUnicodeCollation->StriColl(
|
||||
mUnicodeCollation,
|
||||
TextPath1,
|
||||
TextPath2);
|
||||
|
||||
|
@ -254,4 +255,39 @@ DevicePathCompare (
|
|||
FreePool(TextPath2);
|
||||
|
||||
return (RetVal);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Function to compare 2 strings without regard to case of the characters.
|
||||
|
||||
@param[in] Buffer1 Pointer to String to compare.
|
||||
@param[in] Buffer2 Pointer to second String to compare.
|
||||
|
||||
@retval 0 Buffer1 equal to Buffer2.
|
||||
@return < 0 Buffer1 is less than Buffer2.
|
||||
@return > 0 Buffer1 is greater than Buffer2.
|
||||
**/
|
||||
INTN
|
||||
EFIAPI
|
||||
StringNoCaseCompare (
|
||||
IN VOID *Buffer1,
|
||||
IN VOID *Buffer2
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
if (mUnicodeCollation == NULL) {
|
||||
Status = gBS->LocateProtocol(
|
||||
&gEfiUnicodeCollation2ProtocolGuid,
|
||||
NULL,
|
||||
(VOID**)&mUnicodeCollation);
|
||||
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
}
|
||||
|
||||
return (mUnicodeCollation->StriColl(
|
||||
mUnicodeCollation,
|
||||
*(CHAR16**)Buffer1,
|
||||
*(CHAR16**)Buffer2));
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue