Charles Davis : kernel32: Make CopyFile(Ex)() succeed even if the source file is delete-locked.

Alexandre Julliard julliard at winehq.org
Fri Jan 18 12:07:36 CST 2013


Module: wine
Branch: master
Commit: 5a3ff7ccc17e3d6a5651761dd89c6989ea5471eb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5a3ff7ccc17e3d6a5651761dd89c6989ea5471eb

Author: Charles Davis <cdavis5x at gmail.com>
Date:   Thu Jan 17 13:28:44 2013 -0700

kernel32: Make CopyFile(Ex)() succeed even if the source file is delete-locked.

---

 dlls/kernel32/path.c       |    3 ++-
 dlls/kernel32/tests/file.c |    4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index e42b05b..1cfd850 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -957,7 +957,8 @@ BOOL WINAPI CopyFileExW(LPCWSTR source, LPCWSTR dest,
 
     TRACE("%s -> %s, %x\n", debugstr_w(source), debugstr_w(dest), flags);
 
-    if ((h1 = CreateFileW(source, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
+    if ((h1 = CreateFileW(source, GENERIC_READ,
+                     FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                      NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE)
     {
         WARN("Unable to open source %s\n", debugstr_w(source));
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index ce25cb9..3216fa5 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -652,11 +652,11 @@ static void test_CopyFileA(void)
         "copying from an r+w opened and r shared file failed (ret=%d, err=%d)\n", retok, GetLastError());
     CloseHandle(hfile);
 
-    /* copying from a delete-locked source is unreliable */
+    /* copying from a delete-locked source mostly succeeds */
     hfile = CreateFileA(source, DELETE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
     ok(hfile != INVALID_HANDLE_VALUE, "failed to open source file, error %d\n", GetLastError());
     retok = CopyFileA(source, dest, FALSE);
-    ok((!retok && GetLastError() == ERROR_SHARING_VIOLATION) || broken(retok) /* 98, Vista, 2k8, 7 */,
+    ok(retok || broken(!retok && GetLastError() == ERROR_SHARING_VIOLATION) /* NT, 2000, XP */,
         "copying from a delete-locked file failed (ret=%d, err=%d)\n", retok, GetLastError());
     CloseHandle(hfile);
 




More information about the wine-cvs mailing list