]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Application/Shell/ShellProtocol.c
ShellPkg/ShellProtocol: sort files by FullName in RemoveDupInFileList()
[mirror_edk2.git] / ShellPkg / Application / Shell / ShellProtocol.c
index 4e639fe35e4f289f3ea0401d981646cd15c63555..e79c39058b3e5d1d9f0051931291625ed3799771 100644 (file)
@@ -1855,6 +1855,8 @@ EfiShellRemoveDupInFileList(
   IN EFI_SHELL_FILE_INFO **FileList\r
   )\r
 {\r
+  EFI_STATUS          Status;\r
+  EFI_SHELL_FILE_INFO *Duplicates;\r
   EFI_SHELL_FILE_INFO *ShellFileListItem;\r
   EFI_SHELL_FILE_INFO *ShellFileListItem2;\r
   EFI_SHELL_FILE_INFO *TempNode;\r
@@ -1862,6 +1864,20 @@ EfiShellRemoveDupInFileList(
   if (FileList == NULL || *FileList == NULL) {\r
     return (EFI_INVALID_PARAMETER);\r
   }\r
+\r
+  Status = ShellSortFileList (\r
+             FileList,\r
+             &Duplicates,\r
+             ShellSortFileListByFullName\r
+             );\r
+  if (!EFI_ERROR (Status)) {\r
+    EfiShellFreeFileList (&Duplicates);\r
+    return EFI_SUCCESS;\r
+  }\r
+  //\r
+  // Fall back to the slow method that needs no extra memory, and so cannot\r
+  // fail.\r
+  //\r
   for ( ShellFileListItem = (EFI_SHELL_FILE_INFO*)GetFirstNode(&(*FileList)->Link)\r
       ; !IsNull(&(*FileList)->Link, &ShellFileListItem->Link)\r
       ; ShellFileListItem = (EFI_SHELL_FILE_INFO*)GetNextNode(&(*FileList)->Link, &ShellFileListItem->Link)\r