mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Added patch to fix MoveFile with source == dest.
This commit is contained in:
parent
a3fc9d953a
commit
7234a34ea2
@ -0,0 +1,108 @@
|
||||
From f77e3080ec1b930e5ad669fb863d03330f956afc Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 12:41:46 +0800
|
||||
Subject: kernel32/tests: Fix compilation with PSDK.
|
||||
|
||||
---
|
||||
dlls/kernel32/tests/file.c | 23 +++++++++++++----------
|
||||
1 file changed, 13 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index 5d21343..464da86 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -38,9 +38,7 @@
|
||||
#include "winnls.h"
|
||||
#include "fileapi.h"
|
||||
|
||||
-#ifdef WINE_NO_UNICODE_MACROS
|
||||
#undef DeleteFile /* needed for FILE_DISPOSITION_INFO */
|
||||
-#endif
|
||||
|
||||
static HANDLE (WINAPI *pFindFirstFileExA)(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);
|
||||
static BOOL (WINAPI *pReplaceFileA)(LPCSTR, LPCSTR, LPCSTR, DWORD, LPVOID, LPVOID);
|
||||
@@ -60,6 +58,8 @@ static NTSTATUS (WINAPI *pNtCreateFile)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES
|
||||
static BOOL (WINAPI *pRtlDosPathNameToNtPathName_U)(LPCWSTR, PUNICODE_STRING, PWSTR*, CURDIR*);
|
||||
static NTSTATUS (WINAPI *pRtlAnsiStringToUnicodeString)(PUNICODE_STRING, PCANSI_STRING, BOOLEAN);
|
||||
static BOOL (WINAPI *pSetFileInformationByHandle)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, void*, DWORD);
|
||||
+static void (WINAPI *pRtlInitAnsiString)(PANSI_STRING,PCSZ);
|
||||
+static void (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);
|
||||
|
||||
static const char filename[] = "testfile.xxx";
|
||||
static const char sillytext[] =
|
||||
@@ -90,6 +90,8 @@ static void InitFunctionPointers(void)
|
||||
pNtCreateFile = (void *)GetProcAddress(hntdll, "NtCreateFile");
|
||||
pRtlDosPathNameToNtPathName_U = (void *)GetProcAddress(hntdll, "RtlDosPathNameToNtPathName_U");
|
||||
pRtlAnsiStringToUnicodeString = (void *)GetProcAddress(hntdll, "RtlAnsiStringToUnicodeString");
|
||||
+ pRtlInitAnsiString = (void *)GetProcAddress(hntdll, "RtlInitAnsiString");
|
||||
+ pRtlFreeUnicodeString = (void *)GetProcAddress(hntdll, "RtlFreeUnicodeString");
|
||||
|
||||
pFindFirstFileExA=(void*)GetProcAddress(hkernel32, "FindFirstFileExA");
|
||||
pReplaceFileA=(void*)GetProcAddress(hkernel32, "ReplaceFileA");
|
||||
@@ -268,7 +270,8 @@ static void get_nt_pathW( const char *name, UNICODE_STRING *nameW )
|
||||
ANSI_STRING str;
|
||||
NTSTATUS status;
|
||||
BOOLEAN ret;
|
||||
- RtlInitAnsiString( &str, name );
|
||||
+
|
||||
+ pRtlInitAnsiString( &str, name );
|
||||
|
||||
status = pRtlAnsiStringToUnicodeString( &strW, &str, TRUE );
|
||||
ok( !status, "RtlAnsiStringToUnicodeString failed with %08x\n", status );
|
||||
@@ -276,7 +279,7 @@ static void get_nt_pathW( const char *name, UNICODE_STRING *nameW )
|
||||
ret = pRtlDosPathNameToNtPathName_U( strW.Buffer, nameW, NULL, NULL );
|
||||
ok( ret, "RtlDosPathNameToNtPathName_U failed\n" );
|
||||
|
||||
- RtlFreeUnicodeString( &strW );
|
||||
+ pRtlFreeUnicodeString( &strW );
|
||||
}
|
||||
|
||||
static void test__lcreat( void )
|
||||
@@ -352,30 +355,30 @@ static void test__lcreat( void )
|
||||
attr.SecurityDescriptor = NULL;
|
||||
attr.SecurityQualityOfService = NULL;
|
||||
|
||||
- status = NtCreateFile( &file, GENERIC_READ | GENERIC_WRITE | DELETE, &attr, &io, NULL, 0,
|
||||
+ status = pNtCreateFile( &file, GENERIC_READ | GENERIC_WRITE | DELETE, &attr, &io, NULL, 0,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
FILE_OPEN, FILE_DELETE_ON_CLOSE | FILE_NON_DIRECTORY_FILE, NULL, 0 );
|
||||
ok( status == STATUS_ACCESS_DENIED, "expected STATUS_ACCESS_DENIED, got %08x\n", status );
|
||||
ok( GetFileAttributesA( filename ) != INVALID_FILE_ATTRIBUTES, "file was deleted\n" );
|
||||
|
||||
- status = NtCreateFile( &file, DELETE, &attr, &io, NULL, 0,
|
||||
+ status = pNtCreateFile( &file, DELETE, &attr, &io, NULL, 0,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
FILE_OPEN, FILE_DELETE_ON_CLOSE | FILE_NON_DIRECTORY_FILE, NULL, 0 );
|
||||
ok( status == STATUS_CANNOT_DELETE, "expected STATUS_CANNOT_DELETE, got %08x\n", status );
|
||||
|
||||
- status = NtCreateFile( &file, DELETE, &attr, &io, NULL, 0,
|
||||
+ status = pNtCreateFile( &file, DELETE, &attr, &io, NULL, 0,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
FILE_OPEN, FILE_DELETE_ON_CLOSE | FILE_DIRECTORY_FILE, NULL, 0 );
|
||||
ok( status == STATUS_NOT_A_DIRECTORY, "expected STATUS_NOT_A_DIRECTORY, got %08x\n", status );
|
||||
|
||||
- status = NtCreateFile( &file, DELETE, &attr, &io, NULL, 0,
|
||||
+ status = pNtCreateFile( &file, DELETE, &attr, &io, NULL, 0,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
FILE_OPEN_IF, FILE_DELETE_ON_CLOSE | FILE_NON_DIRECTORY_FILE, NULL, 0 );
|
||||
todo_wine
|
||||
ok( status == STATUS_CANNOT_DELETE, "expected STATUS_CANNOT_DELETE, got %08x\n", status );
|
||||
if (!status) CloseHandle( file );
|
||||
|
||||
- RtlFreeUnicodeString( &filenameW );
|
||||
+ pRtlFreeUnicodeString( &filenameW );
|
||||
|
||||
todo_wine
|
||||
ok( GetFileAttributesA( filename ) != INVALID_FILE_ATTRIBUTES, "file was deleted\n" );
|
||||
@@ -4722,7 +4725,7 @@ static void test_SetFileInformationByHandle(void)
|
||||
{
|
||||
FILE_ATTRIBUTE_TAG_INFO fileattrinfo = { 0 };
|
||||
FILE_REMOTE_PROTOCOL_INFO protinfo = { 0 };
|
||||
- FILE_STANDARD_INFO stdinfo = { };
|
||||
+ FILE_STANDARD_INFO stdinfo = { {{0}},{{0}},0,FALSE,FALSE };
|
||||
FILE_COMPRESSION_INFO compressinfo;
|
||||
FILE_DISPOSITION_INFO dispinfo;
|
||||
char tempFileName[MAX_PATH];
|
||||
--
|
||||
2.9.0
|
||||
|
@ -0,0 +1,63 @@
|
||||
From a525651de2a7b38886e1f77ce6cf1007facf08f4 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 12:45:30 +0800
|
||||
Subject: kernel32/tests: Fix a bunch of access denied errors by using a
|
||||
dedicated TEMP directory.
|
||||
|
||||
---
|
||||
dlls/kernel32/tests/file.c | 21 ++++++++++++++++++---
|
||||
1 file changed, 18 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index 464da86..d109657 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -61,7 +61,7 @@ static BOOL (WINAPI *pSetFileInformationByHandle)(HANDLE, FILE_INFO_BY_HANDLE_CL
|
||||
static void (WINAPI *pRtlInitAnsiString)(PANSI_STRING,PCSZ);
|
||||
static void (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);
|
||||
|
||||
-static const char filename[] = "testfile.xxx";
|
||||
+static char filename[MAX_PATH];
|
||||
static const char sillytext[] =
|
||||
"en larvig liten text dx \033 gx hej 84 hej 4484 ! \001\033 bla bl\na.. bla bla."
|
||||
"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3"
|
||||
@@ -455,10 +455,15 @@ static void test__lcreat( void )
|
||||
if (INVALID_HANDLE_VALUE==find)
|
||||
ok (0, "file \"%s\" not found\n", filename);
|
||||
else {
|
||||
+ const char *name = strrchr(filename, '\\');
|
||||
+
|
||||
+ if (name) name++;
|
||||
+ else name = filename;
|
||||
+
|
||||
ret = FindClose(find);
|
||||
ok ( 0 != ret, "FindClose complains (%d)\n", GetLastError ());
|
||||
- ok (!strcmp (filename, search_results.cFileName),
|
||||
- "found unexpected name \"%s\"\n", search_results.cFileName);
|
||||
+ ok (!strcmp (name, search_results.cFileName),
|
||||
+ "expected \"%s\", got \"%s\"\n", name, search_results.cFileName);
|
||||
search_results.dwFileAttributes &= ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
|
||||
ok (FILE_ATTRIBUTE_ARCHIVE==search_results.dwFileAttributes,
|
||||
"attributes of file \"%s\" are 0x%04x\n", search_results.cFileName,
|
||||
@@ -4810,8 +4815,18 @@ static void test_GetFileAttributesExW(void)
|
||||
|
||||
START_TEST(file)
|
||||
{
|
||||
+ char temp_path[MAX_PATH];
|
||||
+ DWORD ret;
|
||||
+
|
||||
InitFunctionPointers();
|
||||
|
||||
+ ret = GetTempPathA(MAX_PATH, temp_path);
|
||||
+ ok(ret != 0, "GetTempPath error %u\n", GetLastError());
|
||||
+ ret = GetTempFileNameA(temp_path, "tmp", 0, filename);
|
||||
+ ok(ret != 0, "GetTempFileName error %u\n", GetLastError());
|
||||
+ ret = DeleteFileA(filename);
|
||||
+ ok(ret != 0, "DeleteFile error %u\n", GetLastError());
|
||||
+
|
||||
test__hread( );
|
||||
test__hwrite( );
|
||||
test__lclose( );
|
||||
--
|
||||
2.9.0
|
||||
|
@ -0,0 +1,36 @@
|
||||
From e81ccc4ba4bd31af55294ed6f31a119dada088b8 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 12:47:52 +0800
|
||||
Subject: kernel32/tests: Move the MoveFile test where it belongs.
|
||||
|
||||
---
|
||||
dlls/kernel32/tests/file.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index d109657..8932d53 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -703,9 +703,6 @@ static void test_CopyFileA(void)
|
||||
ret = GetTempFileNameA(temp_path, prefix, 0, source);
|
||||
ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError());
|
||||
|
||||
- ret = MoveFileA(source, source);
|
||||
- todo_wine ok(ret, "MoveFileA: failed, error %d\n", GetLastError());
|
||||
-
|
||||
/* 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 */),
|
||||
@@ -1887,6 +1884,9 @@ static void test_MoveFileA(void)
|
||||
ret = GetTempFileNameA(tempdir, prefix, 0, dest);
|
||||
ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError());
|
||||
|
||||
+ ret = MoveFileA(source, source);
|
||||
+ todo_wine ok(ret, "MoveFileA: failed, error %d\n", GetLastError());
|
||||
+
|
||||
ret = MoveFileA(source, dest);
|
||||
ok(!ret && GetLastError() == ERROR_ALREADY_EXISTS,
|
||||
"MoveFileA: unexpected error %d\n", GetLastError());
|
||||
--
|
||||
2.9.0
|
||||
|
@ -0,0 +1,104 @@
|
||||
From 44e1890d7de78cc246d1905ba91c10822de78368 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 13:02:13 +0800
|
||||
Subject: kernel32: MoveFile(source, source) should succeed.
|
||||
|
||||
---
|
||||
dlls/kernel32/path.c | 15 ++++++++++-----
|
||||
dlls/kernel32/tests/file.c | 2 +-
|
||||
dlls/msvcp120/tests/msvcp120.c | 2 +-
|
||||
programs/cmd/tests/test_builtins.cmd.exp | 4 ++--
|
||||
4 files changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index c746693..954ea71 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -1235,7 +1235,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
IO_STATUS_BLOCK io;
|
||||
NTSTATUS status;
|
||||
- HANDLE source_handle = 0, dest_handle;
|
||||
+ HANDLE source_handle = 0, dest_handle = 0;
|
||||
ANSI_STRING source_unix, dest_unix;
|
||||
|
||||
TRACE("(%s,%s,%p,%p,%04x)\n",
|
||||
@@ -1294,18 +1294,22 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT );
|
||||
if (status == STATUS_SUCCESS) /* destination exists */
|
||||
{
|
||||
- NtClose( dest_handle );
|
||||
if (!(flag & MOVEFILE_REPLACE_EXISTING))
|
||||
{
|
||||
- SetLastError( ERROR_ALREADY_EXISTS );
|
||||
- RtlFreeUnicodeString( &nt_name );
|
||||
- goto error;
|
||||
+ if (!is_same_file( source_handle, dest_handle ))
|
||||
+ {
|
||||
+ SetLastError( ERROR_ALREADY_EXISTS );
|
||||
+ RtlFreeUnicodeString( &nt_name );
|
||||
+ goto error;
|
||||
+ }
|
||||
}
|
||||
else if (info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) /* cannot replace directory */
|
||||
{
|
||||
SetLastError( ERROR_ACCESS_DENIED );
|
||||
goto error;
|
||||
}
|
||||
+
|
||||
+ NtClose( dest_handle );
|
||||
}
|
||||
else if (status != STATUS_OBJECT_NAME_NOT_FOUND)
|
||||
{
|
||||
@@ -1365,6 +1369,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
|
||||
error:
|
||||
if (source_handle) NtClose( source_handle );
|
||||
+ if (dest_handle) NtClose( dest_handle );
|
||||
RtlFreeAnsiString( &source_unix );
|
||||
RtlFreeAnsiString( &dest_unix );
|
||||
return FALSE;
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index e784a1c..2f9f21a 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -1891,7 +1891,7 @@ static void test_MoveFileA(void)
|
||||
ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError());
|
||||
|
||||
ret = MoveFileA(source, source);
|
||||
- todo_wine ok(ret, "MoveFileA: failed, error %d\n", GetLastError());
|
||||
+ ok(ret, "MoveFileA: failed, error %d\n", GetLastError());
|
||||
|
||||
ret = MoveFileA(source, dest);
|
||||
ok(!ret && GetLastError() == ERROR_ALREADY_EXISTS,
|
||||
diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c
|
||||
index 5df5440..b169dc5 100644
|
||||
--- a/dlls/msvcp120/tests/msvcp120.c
|
||||
+++ b/dlls/msvcp120/tests/msvcp120.c
|
||||
@@ -1204,7 +1204,7 @@ static void test_tr2_sys__Rename(void)
|
||||
CloseHandle(file);
|
||||
|
||||
ret = p_tr2_sys__Rename("tr2_test_dir\\f1", "tr2_test_dir\\f1");
|
||||
- todo_wine ok(ERROR_SUCCESS == ret, "test_tr2_sys__Rename(): expect: ERROR_SUCCESS, got %d\n", ret);
|
||||
+ ok(ERROR_SUCCESS == ret, "test_tr2_sys__Rename(): expect: ERROR_SUCCESS, got %d\n", ret);
|
||||
for(i=0; i<sizeof(tests)/sizeof(tests[0]); i++) {
|
||||
errno = 0xdeadbeef;
|
||||
if(tests[i].val == ERROR_SUCCESS) {
|
||||
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
|
||||
index d01a23e..c559e3b 100644
|
||||
--- a/programs/cmd/tests/test_builtins.cmd.exp
|
||||
+++ b/programs/cmd/tests/test_builtins.cmd.exp
|
||||
@@ -1058,8 +1058,8 @@ file move succeeded
|
||||
@todo_wine@bar@or_broken@baz
|
||||
read-only files are moveable
|
||||
file moved in subdirectory
|
||||
-@todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
|
||||
-@todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
|
||||
+moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
|
||||
+ErrorLevel: 0@or_broken@ErrorLevel: 1
|
||||
--- directory move
|
||||
simple directory move succeeded
|
||||
moving a directory to itself gives error; errlevel 1
|
||||
--
|
||||
2.9.0
|
||||
|
@ -0,0 +1,76 @@
|
||||
From 96e7b57c5591087cfd07b0658ac33a1ec6bde3b5 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 13:32:42 +0800
|
||||
Subject: kernel32: MoveFile should make sure that it has the delete access to
|
||||
the source file.
|
||||
|
||||
---
|
||||
dlls/kernel32/path.c | 6 ++++--
|
||||
dlls/kernel32/tests/file.c | 20 ++++++++------------
|
||||
2 files changed, 12 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index f554d14..d7fc20e 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -1338,7 +1338,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
attr.SecurityDescriptor = NULL;
|
||||
attr.SecurityQualityOfService = NULL;
|
||||
|
||||
- status = NtOpenFile( &source_handle, SYNCHRONIZE, &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT );
|
||||
+ status = NtOpenFile( &source_handle, DELETE | SYNCHRONIZE, &attr, &io,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_SYNCHRONOUS_IO_NONALERT );
|
||||
if (status == STATUS_SUCCESS)
|
||||
status = wine_nt_to_unix_file_name( &nt_name, &source_unix, FILE_OPEN, FALSE );
|
||||
RtlFreeUnicodeString( &nt_name );
|
||||
@@ -1362,7 +1363,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
SetLastError( ERROR_PATH_NOT_FOUND );
|
||||
goto error;
|
||||
}
|
||||
- status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0,
|
||||
+ status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT );
|
||||
if (status == STATUS_SUCCESS) /* destination exists */
|
||||
{
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index f0f9232..6fcf019 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -1905,12 +1905,10 @@ static void test_MoveFileA(void)
|
||||
ok(hmapfile != NULL, "CreateFileMapping: error %d\n", GetLastError());
|
||||
|
||||
ret = MoveFileA(source, dest);
|
||||
- todo_wine {
|
||||
- ok(!ret, "MoveFileA: expected failure\n");
|
||||
- ok(GetLastError() == ERROR_SHARING_VIOLATION ||
|
||||
- broken(GetLastError() == ERROR_ACCESS_DENIED), /* Win9x and WinMe */
|
||||
- "MoveFileA: expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
|
||||
- }
|
||||
+ ok(!ret, "MoveFileA: expected failure\n");
|
||||
+ ok(GetLastError() == ERROR_SHARING_VIOLATION ||
|
||||
+ broken(GetLastError() == ERROR_ACCESS_DENIED), /* Win9x and WinMe */
|
||||
+ "MoveFileA: expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
|
||||
|
||||
CloseHandle(hmapfile);
|
||||
CloseHandle(hfile);
|
||||
@@ -1925,12 +1923,10 @@ static void test_MoveFileA(void)
|
||||
ok(hmapfile != NULL, "CreateFileMapping: error %d\n", GetLastError());
|
||||
|
||||
ret = MoveFileA(source, dest);
|
||||
- todo_wine {
|
||||
- ok(!ret, "MoveFileA: expected failure\n");
|
||||
- ok(GetLastError() == ERROR_SHARING_VIOLATION ||
|
||||
- broken(GetLastError() == ERROR_ACCESS_DENIED), /* Win9x and WinMe */
|
||||
- "MoveFileA: expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
|
||||
- }
|
||||
+ ok(!ret, "MoveFileA: expected failure\n");
|
||||
+ ok(GetLastError() == ERROR_SHARING_VIOLATION ||
|
||||
+ broken(GetLastError() == ERROR_ACCESS_DENIED), /* Win9x and WinMe */
|
||||
+ "MoveFileA: expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
|
||||
|
||||
CloseHandle(hmapfile);
|
||||
CloseHandle(hfile);
|
||||
--
|
||||
2.9.0
|
||||
|
1
patches/kernel32-MoveFile/definition
Normal file
1
patches/kernel32-MoveFile/definition
Normal file
@ -0,0 +1 @@
|
||||
Fixes: [14901] MoveFile with source == dest should succeed.
|
@ -174,6 +174,7 @@ patch_enable_all ()
|
||||
enable_kernel32_LocaleNameToLCID="$1"
|
||||
enable_kernel32_Locale_Definitions="$1"
|
||||
enable_kernel32_Misalign_Workaround="$1"
|
||||
enable_kernel32_MoveFile="$1"
|
||||
enable_kernel32_Named_Pipe="$1"
|
||||
enable_kernel32_NeedCurrentDirectoryForExePath="$1"
|
||||
enable_kernel32_Profile="$1"
|
||||
@ -706,6 +707,9 @@ patch_enable ()
|
||||
kernel32-Misalign_Workaround)
|
||||
enable_kernel32_Misalign_Workaround="$2"
|
||||
;;
|
||||
kernel32-MoveFile)
|
||||
enable_kernel32_MoveFile="$2"
|
||||
;;
|
||||
kernel32-Named_Pipe)
|
||||
enable_kernel32_Named_Pipe="$2"
|
||||
;;
|
||||
@ -4262,6 +4266,30 @@ if test "$enable_kernel32_Misalign_Workaround" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-MoveFile
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#14901] MoveFile with source == dest should succeed.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/path.c, dlls/kernel32/tests/file.c, dlls/msvcp120/tests/msvcp120.c,
|
||||
# | programs/cmd/tests/test_builtins.cmd.exp
|
||||
# |
|
||||
if test "$enable_kernel32_MoveFile" -eq 1; then
|
||||
patch_apply kernel32-MoveFile/0001-kernel32-tests-Fix-compilation-with-PSDK.patch
|
||||
patch_apply kernel32-MoveFile/0002-kernel32-tests-Fix-a-bunch-of-access-denied-errors-b.patch
|
||||
patch_apply kernel32-MoveFile/0003-kernel32-tests-Move-the-MoveFile-test-where-it-belon.patch
|
||||
patch_apply kernel32-MoveFile/0004-kernel32-MoveFile-source-source-should-succeed.patch
|
||||
patch_apply kernel32-MoveFile/0005-kernel32-MoveFile-should-make-sure-that-it-has-the-d.patch
|
||||
(
|
||||
echo '+ { "Dmitry Timoshkov", "kernel32/tests: Fix compilation with PSDK.", 1 },';
|
||||
echo '+ { "Dmitry Timoshkov", "kernel32/tests: Fix a bunch of access denied errors by using a dedicated TEMP directory.", 1 },';
|
||||
echo '+ { "Dmitry Timoshkov", "kernel32/tests: Move the MoveFile test where it belongs.", 1 },';
|
||||
echo '+ { "Dmitry Timoshkov", "kernel32: MoveFile(source, source) should succeed.", 1 },';
|
||||
echo '+ { "Dmitry Timoshkov", "kernel32: MoveFile should make sure that it has the delete access to the source file.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-Desktop_Refcount
|
||||
# |
|
||||
# | Modified files:
|
||||
|
Loading…
Reference in New Issue
Block a user