Module: wine Branch: master Commit: 5a3ff7ccc17e3d6a5651761dd89c6989ea5471eb URL: http://source.winehq.org/git/wine.git/?a=commit;h=5a3ff7ccc17e3d6a5651761dd8...
Author: Charles Davis cdavis5x@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);