diff options
author | jcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-12-07 18:04:03 +0000 |
---|---|---|
committer | jcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-12-07 18:04:03 +0000 |
commit | 11d2decf8103dc94c131c7aedcd54408a3abad97 (patch) | |
tree | f6fb4f7f2ac3e0196fc5bb369269bff194303a74 | |
parent | 3a5ac5bff0a78b8dd88313bbd1b51965b9999887 (diff) | |
download | edk2-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
-rw-r--r-- | ShellPkg/Include/Library/SortLib.h | 29 | ||||
-rw-r--r-- | ShellPkg/Library/BaseSortLib/BaseSortLib.c | 23 | ||||
-rw-r--r-- | ShellPkg/Library/UefiSortLib/UefiSortLib.c | 60 |
3 files changed, 95 insertions, 17 deletions
diff --git a/ShellPkg/Include/Library/SortLib.h b/ShellPkg/Include/Library/SortLib.h index 2761994572..e213b7a40e 100644 --- a/ShellPkg/Include/Library/SortLib.h +++ b/ShellPkg/Include/Library/SortLib.h @@ -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__
diff --git a/ShellPkg/Library/BaseSortLib/BaseSortLib.c b/ShellPkg/Library/BaseSortLib/BaseSortLib.c index 8ee9abb3d3..91b2a17e7a 100644 --- a/ShellPkg/Library/BaseSortLib/BaseSortLib.c +++ b/ShellPkg/Library/BaseSortLib/BaseSortLib.c @@ -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;
+}
+
+
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));
+}
+
+
|