]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiSortLib/UefiSortLib.c
MdeModulePkg/PartitionDxe: Fixed El Torito support when the medium is not a CDROM
[mirror_edk2.git] / ShellPkg / Library / UefiSortLib / UefiSortLib.c
index 4b89358f1a59946eb705c6eaae90aa2a5f04b84c..2aab9d26919eb472076d416de3c6b2ced3fb2151 100644 (file)
 **/\r
 \r
 #include <Uefi.h>\r
+#include <ShellBase.h>\r
 \r
 #include <Protocol/UnicodeCollation.h>\r
 #include <Protocol/DevicePath.h>\r
-#include <Protocol/DevicePathToText.h>\r
 \r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/BaseLib.h>\r
@@ -24,8 +24,8 @@
 #include <Library/DebugLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/SortLib.h>\r
+#include <Library/DevicePathLib.h>\r
 \r
-STATIC EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *mDevicePathToText = NULL;\r
 STATIC EFI_UNICODE_COLLATION_PROTOCOL   *mUnicodeCollation = NULL;\r
 \r
 \r
@@ -43,13 +43,13 @@ STATIC EFI_UNICODE_COLLATION_PROTOCOL   *mUnicodeCollation = NULL;
   if Count is < 2 then perform no action.\r
   if Size is < 1 then perform no action.\r
 \r
-  @param[in,out] BufferToSort   on call a Buffer of (possibly sorted) elements\r
-                                on return a buffer of sorted elements\r
-  @param[in] Count              the number of elements in the buffer to sort\r
-  @param[in] ElementSize        Size of an element in bytes\r
-  @param[in] CompareFunction    The function to call to perform the comparison\r
-                                of any 2 elements\r
-  @param[in] Buffer             Buffer of size ElementSize for use in swapping\r
+  @param[in, out] BufferToSort   on call a Buffer of (possibly sorted) elements\r
+                                 on return a buffer of sorted elements\r
+  @param[in] Count               the number of elements in the buffer to sort\r
+  @param[in] ElementSize         Size of an element in bytes\r
+  @param[in] CompareFunction     The function to call to perform the comparison\r
+                                 of any 2 elements\r
+  @param[in] Buffer              Buffer of size ElementSize for use in swapping\r
 **/\r
 VOID\r
 EFIAPI\r
@@ -149,12 +149,12 @@ QuickSortWorker (
   if Count is < 2 then perform no action.\r
   if Size is < 1 then perform no action.\r
 \r
-  @param[in,out] BufferToSort   on call a Buffer of (possibly sorted) elements\r
-                                on return a buffer of sorted elements\r
-  @param[in] Count              the number of elements in the buffer to sort\r
-  @param[in] ElementSize        Size of an element in bytes\r
-  @param[in] CompareFunction    The function to call to perform the comparison\r
-                                of any 2 elements\r
+  @param[in, out] BufferToSort   on call a Buffer of (possibly sorted) elements\r
+                                 on return a buffer of sorted elements\r
+  @param[in] Count               the number of elements in the buffer to sort\r
+  @param[in] ElementSize         Size of an element in bytes\r
+  @param[in] CompareFunction     The function to call to perform the comparison\r
+                                 of any 2 elements\r
 **/\r
 VOID\r
 EFIAPI\r
@@ -223,15 +223,6 @@ DevicePathCompare (
     return 1;\r
   }\r
 \r
-  if (mDevicePathToText == NULL) {\r
-    Status = gBS->LocateProtocol(\r
-      &gEfiDevicePathToTextProtocolGuid,\r
-      NULL,\r
-      (VOID**)&mDevicePathToText);\r
-\r
-    ASSERT_EFI_ERROR(Status);\r
-  }\r
-\r
   if (mUnicodeCollation == NULL) {\r
     Status = gBS->LocateProtocol(\r
       &gEfiUnicodeCollation2ProtocolGuid,\r
@@ -241,23 +232,29 @@ DevicePathCompare (
     ASSERT_EFI_ERROR(Status);\r
   }\r
 \r
-  TextPath1 = mDevicePathToText->ConvertDevicePathToText(\r
+  TextPath1 = ConvertDevicePathToText(\r
     DevicePath1,\r
     FALSE,\r
     FALSE);\r
 \r
-  TextPath2 = mDevicePathToText->ConvertDevicePathToText(\r
+  TextPath2 = ConvertDevicePathToText(\r
     DevicePath2,\r
     FALSE,\r
     FALSE);\r
 \r
-  RetVal = mUnicodeCollation->StriColl(\r
-    mUnicodeCollation,\r
-    TextPath1,\r
-    TextPath2);\r
+  if (TextPath1 == NULL) {\r
+    RetVal = -1;\r
+  } else if (TextPath2 == NULL) {\r
+    RetVal = 1;\r
+  } else {\r
+    RetVal = mUnicodeCollation->StriColl(\r
+      mUnicodeCollation,\r
+      TextPath1,\r
+      TextPath2);\r
+  }\r
 \r
-  FreePool(TextPath1);\r
-  FreePool(TextPath2);\r
+  SHELL_FREE_NON_NULL(TextPath1);\r
+  SHELL_FREE_NON_NULL(TextPath2);\r
 \r
   return (RetVal);\r
 }\r