kernel32: CopyFile cannot overwrite a file with itself (try 3)
Damjan Jovanovic
damjan.jov at gmail.com
Thu Jun 10 06:27:33 CDT 2010
Changelog:
* kernel32: CopyFile cannot overwrite a file with itself
Try 3 removes FILE_SHARE_WRITE from the destination instead of the source.
Damjan Jovanovic
-------------- next part --------------
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index c319cb5..2bfd062 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -911,7 +911,7 @@ BOOL WINAPI CopyFileW( LPCWSTR source, LPCWSTR dest, BOOL fail_if_exists )
return FALSE;
}
- if ((h2 = CreateFileW( dest, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ if ((h2 = CreateFileW( dest, GENERIC_WRITE, FILE_SHARE_READ, NULL,
fail_if_exists ? CREATE_NEW : CREATE_ALWAYS,
info.dwFileAttributes, h1 )) == INVALID_HANDLE_VALUE)
{
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index b6f066e..8e8dcf8 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -598,6 +598,10 @@ static void test_CopyFileA(void)
ok( retok && ret == sizeof(prefix),
"WriteFile error %d\n", GetLastError());
ok(GetFileSize(hfile, NULL) == sizeof(prefix), "source file has wrong size\n");
+ /* copying a file to itself must fail */
+ retok = CopyFileA(source, source, FALSE);
+ ok( !retok && (GetLastError() == ERROR_SHARING_VIOLATION || broken(GetLastError() == ERROR_FILE_EXISTS) /* Win 9x */),
+ "copying a file to itself didn't fail (ret=%d, err=%d)\n", retok, GetLastError());
/* get the file time and change it to prove the difference */
ret = GetFileTime(hfile, NULL, NULL, &ft1);
ok( ret, "GetFileTime error %d\n", GetLastError());
More information about the wine-patches
mailing list