summaryrefslogtreecommitdiffstats
path: root/ShellPkg/Library/UefiSortLib
diff options
context:
space:
mode:
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>2009-12-07 18:04:03 +0000
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>2009-12-07 18:04:03 +0000
commit11d2decf8103dc94c131c7aedcd54408a3abad97 (patch)
treef6fb4f7f2ac3e0196fc5bb369269bff194303a74 /ShellPkg/Library/UefiSortLib
parent3a5ac5bff0a78b8dd88313bbd1b51965b9999887 (diff)
downloadedk2-11d2decf8103dc94c131c7aedcd54408a3abad97.tar.gz
edk2-11d2decf8103dc94c131c7aedcd54408a3abad97.tar.bz2
edk2-11d2decf8103dc94c131c7aedcd54408a3abad97.zip
Adding StringNoCaseCompare to SortLib
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9535 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ShellPkg/Library/UefiSortLib')
-rw-r--r--ShellPkg/Library/UefiSortLib/UefiSortLib.c60
1 files changed, 48 insertions, 12 deletions
diff --git a/ShellPkg/Library/UefiSortLib/UefiSortLib.c b/ShellPkg/Library/UefiSortLib/UefiSortLib.c
index 08b8169e21..1df45fb5ae 100644
--- a/ShellPkg/Library/UefiSortLib/UefiSortLib.c
+++ b/ShellPkg/Library/UefiSortLib/UefiSortLib.c
@@ -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);
-} \ No newline at end of file
+}
+
+/**
+ 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));
+}
+
+