[PATCH 5/5] [programs\xcopy] Fix copying empty directories

Jason Edmeades us at edmeades.me.uk
Sun Jun 24 15:44:14 CDT 2018


Found whilst fixing bug#44967

When a directory is searched with /e, an equivalent destination
directory is created immediately, not just when contents are found.

Signed-off-by: Jason Edmeades <us at edmeades.me.uk>
---
 programs/xcopy/tests/xcopy.c |  1 -
 programs/xcopy/xcopy.c       | 13 +++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/programs/xcopy/tests/xcopy.c b/programs/xcopy/tests/xcopy.c
index 0991d49769..94cede6f67 100644
--- a/programs/xcopy/tests/xcopy.c
+++ b/programs/xcopy/tests/xcopy.c
@@ -103,7 +103,6 @@ static void test_parms_syntax(void)
 
     rc = runcmd("xcopy /D/S/E xcopytest xcopytest2\\");
     ok(rc == 0, "xcopy /D/S/E test failed rc=%u\n", rc);
-    todo_wine
     ok(GetFileAttributesA("xcopytest2") != INVALID_FILE_ATTRIBUTES,
        "xcopy failed to copy empty directory\n");
     RemoveDirectoryA("xcopytest2");
diff --git a/programs/xcopy/xcopy.c b/programs/xcopy/xcopy.c
index 97b0538e57..e380cde226 100644
--- a/programs/xcopy/xcopy.c
+++ b/programs/xcopy/xcopy.c
@@ -590,6 +590,13 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
 
     /* Search 2 - do subdirs */
     if (flags & OPT_RECURSIVE) {
+
+        /* If /E is supplied, create the directory now */
+        if ((flags & OPT_EMPTYDIR) &&
+           !(flags & OPT_SIMULATE)) {
+            XCOPY_CreateDirectory(deststem);
+        }
+
         lstrcpyW(inputpath, srcstem);
         lstrcatW(inputpath, wchr_star);
         findres = TRUE;
@@ -613,12 +620,6 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
                 lstrcpyW(outputpath, deststem);
                 if (*destspec == 0x00) {
                     lstrcatW(outputpath, finddata->cFileName);
-
-                    /* If /E is supplied, create the directory now */
-                    if ((flags & OPT_EMPTYDIR) &&
-                        !(flags & OPT_SIMULATE))
-                        XCOPY_CreateDirectory(outputpath);
-
                     lstrcatW(outputpath, wchr_slash);
                 }
 
-- 
2.17.1




More information about the wine-devel mailing list