From 5a3ff7ccc17e3d6a5651761dd89c6989ea5471eb Mon Sep 17 00:00:00 2001 From: Charles Davis Date: Thu, 17 Jan 2013 13:28:44 -0700 Subject: [PATCH] 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 e42b05b9edc..1cfd850fed3 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 ce25cb9cbcc..3216fa54158 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);