From: Roman Pišl rpisl@seznam.cz
--- dlls/kernel32/tests/file.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index 68b9f53700e..69c06c7b0c2 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -4123,6 +4123,7 @@ static void test_ReplaceFileW(void) { WCHAR replaced[MAX_PATH], replacement[MAX_PATH], backup[MAX_PATH]; static const WCHAR prefix[] = {'p','f','x',0}; + static const WCHAR *tmp_on_z = L"Z:/tmp"; WCHAR temp_path[MAX_PATH]; DWORD ret; BOOL removeBackup = FALSE; @@ -4202,6 +4203,27 @@ static void test_ReplaceFileW(void) broken(GetLastError() == ERROR_ACCESS_DENIED), /* win2k */ "DeleteFileW: error (backup) %ld\n", GetLastError()); } + + /* test with forward slashes in the destination and use + * Z:/tmp in Wine to ensure the root is not writable + */ + ret = GetFileAttributesW(tmp_on_z); + if (ret != INVALID_FILE_ATTRIBUTES && (ret & FILE_ATTRIBUTE_DIRECTORY)) + wcscpy(temp_path, tmp_on_z); + + ret = GetTempFileNameW(temp_path, prefix, 0, replaced); + ok(ret, "GetTempFileNameW error (replaced) %ld\n", GetLastError()); + for (int i = 0; i < wcslen(replaced); i++) + if (replaced[i] == L'\') replaced[i] = L'/'; + + ret = GetTempFileNameW(temp_path, prefix, 0, replacement); + ok(ret, "GetTempFileNameW error (replacement) %ld\n", GetLastError()); + ret = pReplaceFileW(replaced, replacement, NULL, 0, 0, 0); + todo_wine + ok(ret, "ReplaceFileW: error %ld\n", GetLastError()); + + DeleteFileW(replaced); + DeleteFileW(replacement); }
static void test_CreateFile(void)