[PATCH 2/2] shell32: Allow SHFileOperation FO_MOVE operations originating from a wildcard unconditionally.

Lorenzo Ferrillo lorenzofersteam at live.it
Sun Apr 12 15:48:34 CDT 2020


Current wine implementation of SHFileOperation FO_MOVE don't allow wildcard move operations involving more then 1 file  unless the move operation also involve a folder.
This patch allow wildcard move operations to work also in this case

Fix Wine bug:https://bugs.winehq.org/show_bug.cgi?id=39269

Signed-off-by: Lorenzo Ferrillo <lorenzofersteam at live.it>
---
 dlls/shell32/shlfileop.c       |  2 +-
 dlls/shell32/tests/shlfileop.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
index b941db3914..ab8454a357 100644
--- a/dlls/shell32/shlfileop.c
+++ b/dlls/shell32/shlfileop.c
@@ -1424,7 +1424,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
     }
 
     if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
-        !flFrom->bAnyDirectories &&
+        !flFrom->bAnyDirectories && !flFrom->bAnyFromWildcard &&
         flFrom->dwNumFiles > flTo->dwNumFiles)
     {
         return ERROR_CANCELLED;
diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c
index ca7876c846..31da9727cd 100644
--- a/dlls/shell32/tests/shlfileop.c
+++ b/dlls/shell32/tests/shlfileop.c
@@ -2743,13 +2743,13 @@ static void test_move_wildchar(void)
     set_curr_dir_path(from, "testdir2\\*.*\0");
     set_curr_dir_path(to, "test4.txt\0");
     retval = SHFileOperationA(&shfo);
-    todo_wine ok(retval == ERROR_SUCCESS, "SHFileOperation failed\n");
-    todo_wine  ok(!shfo.fAnyOperationsAborted, "fAnyOperationsAborted %d\n", shfo.fAnyOperationsAborted);
+    ok(retval == ERROR_SUCCESS, "SHFileOperation failed\n");
+    ok(!shfo.fAnyOperationsAborted, "fAnyOperationsAborted %d\n", shfo.fAnyOperationsAborted);
     ok(file_exists("testdir2"), "dir should not be moved\n");
-    todo_wine  ok(!file_exists("testdir2\\one.txt"), "file should be moved\n");
-    todo_wine  ok(!file_exists("testdir2\\two.txt"), "file should be moved\n");
-    todo_wine  ok(file_exists("test4.txt\\one.txt"), "file should be moved here\n");
-    todo_wine  ok(file_exists("test4.txt\\two.txt"), "file should be moved here\n");
+    ok(!file_exists("testdir2\\one.txt"), "file should be moved\n");
+    ok(!file_exists("testdir2\\two.txt"), "file should be moved\n");
+    ok(file_exists("test4.txt\\one.txt"), "file should be moved here\n");
+    ok(file_exists("test4.txt\\two.txt"), "file should be moved here\n");
 
     DeleteFileA("test4.txt\\one.txt");
     DeleteFileA("test4.txt\\two.txt");
-- 
2.26.0




More information about the wine-devel mailing list