summaryrefslogtreecommitdiff
path: root/ShellPkg
diff options
context:
space:
mode:
Diffstat (limited to 'ShellPkg')
-rw-r--r--ShellPkg/Include/Library/SortLib.h29
-rw-r--r--ShellPkg/Library/BaseSortLib/BaseSortLib.c23
-rw-r--r--ShellPkg/Library/UefiSortLib/UefiSortLib.c60
3 files changed, 95 insertions, 17 deletions
diff --git a/ShellPkg/Include/Library/SortLib.h b/ShellPkg/Include/Library/SortLib.h
index 2761994..e213b7a 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 8ee9abb..91b2a17 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 08b8169..1df45fb 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));
+}
+
+