This patch-set adds the definitions and struct modifications required to eventually implement `FileRenameInformationEx` and `FileLinkInformationEx`.
The initial tests are copies of the tests for `FileRenameInformation` and `FileLinkInformation`, but with the `ReplaceIfExists` field replaced with the equivalient `Flag` value: `FILE_RENAME_REPLACE_IF_EXISTS` or `FILE_LINK_REPLACE_IF_EXISTS` respectively.
-- v3: ntdll/tests: Test both FileLinkInformation and FileLinkInformationEx in test_file_link_information. include: Add flags to FILE_LINK_INFORMATION used by FileLinkInformationEx. ntdll/tests: Test both FileRenameInformation and FileRenameInformationEx in test_file_rename_information.
From: Joel Holdsworth joel@airwebreathe.org.uk
Signed-off-by: Joel Holdsworth joel@airwebreathe.org.uk --- include/winternl.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/include/winternl.h b/include/winternl.h index d3537cc774d..9bcfd43aa5a 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1432,12 +1432,24 @@ typedef struct _FILE_NAME_INFORMATION { } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
typedef struct _FILE_RENAME_INFORMATION { - BOOLEAN ReplaceIfExists; + union { + BOOLEAN ReplaceIfExists; + ULONG Flags; + }; HANDLE RootDirectory; ULONG FileNameLength; WCHAR FileName[1]; } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+#define FILE_RENAME_REPLACE_IF_EXISTS 0x00000001 +#define FILE_RENAME_POSIX_SEMANTICS 0x00000002 +#define FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE 0x00000004 +#define FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE 0x00000008 +#define FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE 0x00000010 +#define FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE 0x00000020 +#define FILE_RENAME_PRESERVE_AVAILABLE_SPACE 0x00000030 +#define FILE_RENAME_IGNORE_READONLY_ATTRIBUTE 0x00000040 + typedef struct _FILE_LINK_INFORMATION { BOOLEAN ReplaceIfExists; HANDLE RootDirectory;
From: Joel Holdsworth joel@airwebreathe.org.uk
Signed-off-by: Joel Holdsworth joel@airwebreathe.org.uk --- dlls/ntdll/tests/file.c | 167 ++++++++++++++++++++-------------------- 1 file changed, 84 insertions(+), 83 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c index e70bbc32be4..b3b7f79f51e 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -1512,7 +1512,7 @@ static void delete_object( WCHAR *path ) } }
-static void test_file_rename_information(void) +static void test_file_rename_information(FILE_INFORMATION_CLASS class) { static const WCHAR foo_txtW[] = {'\','f','o','o','.','t','x','t',0}; static const WCHAR fooW[] = {'f','o','o',0}; @@ -1538,27 +1538,27 @@ static void test_file_rename_information(void) pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); DeleteFileW( newpath ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( fileDeleted, "file should not exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( fileDeleted, "file should not exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( !fileDeleted, "file should exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( !fileDeleted, "file should exist\n" );
fni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) ); res = pNtQueryInformationFile( handle, &io, fni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation ); ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fni->FileName[ fni->FileNameLength / sizeof(WCHAR) ] = 0; - ok( !lstrcmpiW(fni->FileName, newpath + 2), "FileName expected %s, got %s\n", - wine_dbgstr_w(newpath + 2), wine_dbgstr_w(fni->FileName) ); + todo_wine_if( class == FileRenameInformationEx ) ok( !lstrcmpiW(fni->FileName, newpath + 2), "FileName expected %s, got %s\n", + wine_dbgstr_w(newpath + 2), wine_dbgstr_w(fni->FileName) ); HeapFree( GetProcessHeap(), 0, fni );
CloseHandle( handle ); @@ -1576,16 +1576,16 @@ static void test_file_rename_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1606,18 +1606,18 @@ static void test_file_rename_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( fileDeleted, "file should not exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( fileDeleted, "file should not exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" );
@@ -1639,16 +1639,16 @@ static void test_file_rename_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1673,16 +1673,16 @@ static void test_file_rename_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1708,27 +1708,27 @@ static void test_file_rename_information(void) pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); DeleteFileW( newpath ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( fileDeleted, "file should not exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( fileDeleted, "file should not exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( !fileDeleted, "file should exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( !fileDeleted, "file should exist\n" );
fni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) ); res = pNtQueryInformationFile( handle, &io, fni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation ); ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fni->FileName[ fni->FileNameLength / sizeof(WCHAR) ] = 0; - ok( !lstrcmpiW(fni->FileName, newpath + 2), "FileName expected %s, got %s\n", - wine_dbgstr_w(newpath + 2), wine_dbgstr_w(fni->FileName) ); + todo_wine_if( class == FileRenameInformationEx ) ok( !lstrcmpiW(fni->FileName, newpath + 2), "FileName expected %s, got %s\n", + wine_dbgstr_w(newpath + 2), wine_dbgstr_w(fni->FileName) ); HeapFree( GetProcessHeap(), 0, fni );
CloseHandle( handle ); @@ -1755,20 +1755,20 @@ static void test_file_rename_information(void) pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); DeleteFileW( newpath ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); todo_wine ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - todo_wine ok( !fileDeleted, "file should exist\n" ); + todo_wine_if( class != FileRenameInformationEx ) ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - todo_wine ok( fileDeleted, "file should not exist\n" ); + todo_wine_if( class != FileRenameInformationEx ) ok( fileDeleted, "file should not exist\n" );
CloseHandle( handle ); CloseHandle( handle2 ); @@ -1795,16 +1795,16 @@ static void test_file_rename_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_OBJECT_NAME_COLLISION, "io.Status got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_OBJECT_NAME_COLLISION, "io.Status got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1831,16 +1831,16 @@ static void test_file_rename_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_OBJECT_NAME_COLLISION, "io.Status got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_OBJECT_NAME_COLLISION, "io.Status got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1865,18 +1865,18 @@ static void test_file_rename_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( fileDeleted, "file should not exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( fileDeleted, "file should not exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" );
@@ -1901,16 +1901,16 @@ static void test_file_rename_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1938,16 +1938,16 @@ static void test_file_rename_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_OBJECT_NAME_COLLISION, "io.Status got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_OBJECT_NAME_COLLISION, "io.Status got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -1974,16 +1974,16 @@ static void test_file_rename_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2013,16 +2013,16 @@ static void test_file_rename_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_ACCESS_DENIED, "io.Status got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2047,16 +2047,16 @@ static void test_file_rename_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2080,16 +2080,16 @@ static void test_file_rename_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = TRUE; + fri->Flags = FILE_RENAME_REPLACE_IF_EXISTS; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2115,26 +2115,26 @@ static void test_file_rename_information(void) ok( handle2 != INVALID_HANDLE_VALUE, "CreateFileW failed\n" );
fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + lstrlenW(filename) * sizeof(WCHAR) ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = handle2; fri->FileNameLength = lstrlenW(filename) * sizeof(WCHAR); memcpy( fri->FileName, filename, fri->FileNameLength );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( fileDeleted, "file should not exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( fileDeleted, "file should not exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( !fileDeleted, "file should exist\n" ); + todo_wine_if( class == FileRenameInformationEx ) ok( !fileDeleted, "file should exist\n" );
fni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) ); res = pNtQueryInformationFile( handle, &io, fni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation ); ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fni->FileName[ fni->FileNameLength / sizeof(WCHAR) ] = 0; - ok( !lstrcmpiW(fni->FileName, newpath + 2), "FileName expected %s, got %s\n", - wine_dbgstr_w(newpath + 2), wine_dbgstr_w(fni->FileName) ); + todo_wine_if( class == FileRenameInformationEx ) ok( !lstrcmpiW(fni->FileName, newpath + 2), "FileName expected %s, got %s\n", + wine_dbgstr_w(newpath + 2), wine_dbgstr_w(fni->FileName) ); HeapFree( GetProcessHeap(), 0, fni );
CloseHandle( handle ); @@ -2151,16 +2151,16 @@ static void test_file_rename_information(void)
pRtlDosPathNameToNtPathName_U( oldpath, &name_str, NULL, NULL ); fri = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fri->ReplaceIfExists = FALSE; + fri->Flags = 0; fri->RootDirectory = NULL; fri->FileNameLength = name_str.Length; memcpy( fri->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, FileRenameInformation ); - ok( io.Status == STATUS_SUCCESS, "got io status %#lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "got status %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fri, sizeof(FILE_RENAME_INFORMATION) + fri->FileNameLength, class ); + todo_wine_if( class == FileRenameInformationEx ) ok( io.Status == STATUS_SUCCESS, "got io status %#lx\n", io.Status ); + todo_wine_if( class == FileRenameInformationEx ) ok( res == STATUS_SUCCESS, "got status %lx\n", res ); ok( GetFileAttributesW( oldpath ) != INVALID_FILE_ATTRIBUTES, "file should exist\n" );
CloseHandle( handle ); @@ -5677,7 +5677,8 @@ START_TEST(file) test_file_name_information(); test_file_full_size_information(); test_file_all_name_information(); - test_file_rename_information(); + test_file_rename_information(FileRenameInformation); + test_file_rename_information(FileRenameInformationEx); test_file_link_information(); test_file_disposition_information(); test_file_completion_information();
From: Joel Holdsworth joel@airwebreathe.org.uk
Signed-off-by: Joel Holdsworth joel@airwebreathe.org.uk --- include/winternl.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/include/winternl.h b/include/winternl.h index 9bcfd43aa5a..07169e820e0 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1451,12 +1451,26 @@ typedef struct _FILE_RENAME_INFORMATION { #define FILE_RENAME_IGNORE_READONLY_ATTRIBUTE 0x00000040
typedef struct _FILE_LINK_INFORMATION { - BOOLEAN ReplaceIfExists; + union { + BOOLEAN ReplaceIfExists; + ULONG Flags; + }; HANDLE RootDirectory; ULONG FileNameLength; WCHAR FileName[1]; } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
+#define FILE_LINK_REPLACE_IF_EXISTS 0x00000001 +#define FILE_LINK_POSIX_SEMANTICS 0x00000002 +#define FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE 0x00000008 +#define FILE_LINK_NO_INCREASE_AVAILABLE_SPACE 0x00000010 +#define FILE_LINK_NO_DECREASE_AVAILABLE_SPACE 0x00000020 +#define FILE_LINK_PRESERVE_AVAILABLE_SPACE 0x00000030 +#define FILE_LINK_IGNORE_READONLY_ATTRIBUTE 0x00000040 +#define FILE_LINK_FORCE_RESIZE_TARGET_SR 0x00000080 +#define FILE_LINK_FORCE_RESIZE_SOURCE_SR 0x00000100 +#define FILE_LINK_FORCE_RESIZE_SR 0x00000180 + typedef struct _FILE_NAMES_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex;
From: Joel Holdsworth joel@airwebreathe.org.uk
Signed-off-by: Joel Holdsworth joel@airwebreathe.org.uk --- dlls/ntdll/tests/file.c | 195 ++++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 97 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c index b3b7f79f51e..1384847671c 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -2168,7 +2168,7 @@ static void test_file_rename_information(FILE_INFORMATION_CLASS class) delete_object( oldpath ); }
-static void test_file_link_information(void) +static void test_file_link_information(FILE_INFORMATION_CLASS class) { static const WCHAR foo_txtW[] = {'\','f','o','o','.','t','x','t',0}; static const WCHAR fooW[] = {'f','o','o',0}; @@ -2195,20 +2195,20 @@ static void test_file_link_information(void) pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); DeleteFileW( newpath ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( !fileDeleted, "file should exist\n" ); + todo_wine_if( class == FileLinkInformationEx ) ok( !fileDeleted, "file should exist\n" );
fni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) ); res = pNtQueryInformationFile( handle, &io, fni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation ); @@ -2233,16 +2233,16 @@ static void test_file_link_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2263,16 +2263,16 @@ static void test_file_link_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2294,16 +2294,16 @@ static void test_file_link_information(void) wcsrchr( newpath, '\' )[1] = 'F'; pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2336,16 +2336,16 @@ static void test_file_link_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2370,16 +2370,16 @@ static void test_file_link_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2405,17 +2405,17 @@ static void test_file_link_information(void) pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); DeleteFileW( newpath ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY , - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY , + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2453,17 +2453,17 @@ static void test_file_link_information(void) pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); DeleteFileW( newpath ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2488,18 +2488,18 @@ static void test_file_link_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION || res == STATUS_FILE_IS_A_DIRECTORY /* > Win XP */, - "res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION || res == STATUS_FILE_IS_A_DIRECTORY /* > Win XP */, + "res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2526,18 +2526,18 @@ static void test_file_link_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION || res == STATUS_FILE_IS_A_DIRECTORY /* > Win XP */, - "res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION || res == STATUS_FILE_IS_A_DIRECTORY /* > Win XP */, + "res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2562,17 +2562,17 @@ static void test_file_link_information(void) ok( res != 0, "failed to create temp file\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2599,17 +2599,17 @@ static void test_file_link_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2637,18 +2637,18 @@ static void test_file_link_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION || res == STATUS_FILE_IS_A_DIRECTORY /* > Win XP */, - "res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION || res == STATUS_FILE_IS_A_DIRECTORY /* > Win XP */, + "res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2675,17 +2675,17 @@ static void test_file_link_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2715,17 +2715,17 @@ static void test_file_link_information(void)
pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, - "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); - ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == 0xdeadbeef || io.Status == STATUS_FILE_IS_A_DIRECTORY, + "io.Status expected 0xdeadbeef or STATUS_FILE_IS_A_DIRECTORY, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_FILE_IS_A_DIRECTORY, "res expected STATUS_FILE_IS_A_DIRECTORY, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2750,16 +2750,16 @@ static void test_file_link_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "res expected STATUS_OBJECT_NAME_COLLISION, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2783,16 +2783,16 @@ static void test_file_link_information(void) ok( success != 0, "failed to create temp directory\n" ); pRtlDosPathNameToNtPathName_U( newpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "io.Status expected 0xdeadbeef, got %lx\n", io.Status ); - ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_ACCESS_DENIED, "res expected STATUS_ACCESS_DENIED, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; @@ -2818,19 +2818,19 @@ static void test_file_link_information(void) ok( handle2 != INVALID_HANDLE_VALUE, "CreateFileW failed\n" );
fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_LINK_INFORMATION) + lstrlenW(filename) * sizeof(WCHAR) ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = handle2; fli->FileNameLength = lstrlenW(filename) * sizeof(WCHAR); memcpy( fli->FileName, filename, fli->FileNameLength );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == STATUS_SUCCESS, "io.Status expected STATUS_SUCCESS, got %lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_SUCCESS, "res expected STATUS_SUCCESS, got %lx\n", res ); fileDeleted = GetFileAttributesW( oldpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; ok( !fileDeleted, "file should exist\n" ); fileDeleted = GetFileAttributesW( newpath ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND; - ok( !fileDeleted, "file should exist\n" ); + todo_wine_if( class == FileLinkInformationEx ) ok( !fileDeleted, "file should exist\n" );
fni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) ); res = pNtQueryInformationFile( handle, &io, fni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation ); @@ -2854,22 +2854,22 @@ static void test_file_link_information(void)
pRtlDosPathNameToNtPathName_U( oldpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "got io status %#lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "got status %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "got status %lx\n", res );
- fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == STATUS_SUCCESS, "got io status %#lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "got status %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == STATUS_SUCCESS, "got io status %#lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_SUCCESS, "got status %lx\n", res ); ok( GetFileAttributesW( oldpath ) != INVALID_FILE_ATTRIBUTES, "file should exist\n" );
CloseHandle( handle ); @@ -2885,22 +2885,22 @@ static void test_file_link_information(void) wcsrchr( oldpath, '\' )[1] = 'F'; pRtlDosPathNameToNtPathName_U( oldpath, &name_str, NULL, NULL ); fli = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_RENAME_INFORMATION) + name_str.Length ); - fli->ReplaceIfExists = FALSE; + fli->Flags = 0; fli->RootDirectory = NULL; fli->FileNameLength = name_str.Length; memcpy( fli->FileName, name_str.Buffer, name_str.Length ); pRtlFreeUnicodeString( &name_str );
io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); todo_wine ok( io.Status == 0xdeadbeef, "got io status %#lx\n", io.Status ); - ok( res == STATUS_OBJECT_NAME_COLLISION, "got status %lx\n", res ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_OBJECT_NAME_COLLISION, "got status %lx\n", res );
- fli->ReplaceIfExists = TRUE; + fli->Flags = FILE_LINK_REPLACE_IF_EXISTS; io.Status = 0xdeadbeef; - res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, FileLinkInformation ); - ok( io.Status == STATUS_SUCCESS, "got io status %#lx\n", io.Status ); - ok( res == STATUS_SUCCESS, "got status %lx\n", res ); + res = pNtSetInformationFile( handle, &io, fli, sizeof(FILE_LINK_INFORMATION) + fli->FileNameLength, class ); + todo_wine_if( class == FileLinkInformationEx ) ok( io.Status == STATUS_SUCCESS, "got io status %#lx\n", io.Status ); + todo_wine_if( class == FileLinkInformationEx ) ok( res == STATUS_SUCCESS, "got status %lx\n", res ); ok( GetFileAttributesW( oldpath ) != INVALID_FILE_ATTRIBUTES, "file should exist\n" );
CloseHandle( handle ); @@ -5679,7 +5679,8 @@ START_TEST(file) test_file_all_name_information(); test_file_rename_information(FileRenameInformation); test_file_rename_information(FileRenameInformationEx); - test_file_link_information(); + test_file_link_information(FileLinkInformation); + test_file_link_information(FileLinkInformationEx); test_file_disposition_information(); test_file_completion_information(); test_file_id_information();
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=137572
Your paranoid android.
=== w7u_2qxl (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooA8BE.tmp", got L"\Users\winetest\AppData\Local\Temp\fooA8BD.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooA8D8.tmp", got L"\Users\winetest\AppData\Local\Temp\fooA8C7.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooA8FE.tmp", got L"\Users\winetest\AppData\Local\Temp\fooA8FD.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"fooA95B.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooA9A8.tmp"
=== w7u_adm (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9EFD.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9EFC.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9F36.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9F35.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9F6B.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9F6A.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"foo9FD9.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooA026.tmp"
=== w7u_el (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooF103.tmp", got L"\Users\winetest\AppData\Local\Temp\fooF102.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooF11D.tmp", got L"\Users\winetest\AppData\Local\Temp\fooF11C.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooF152.tmp", got L"\Users\winetest\AppData\Local\Temp\fooF151.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"fooF1B0.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooF1FC.tmp"
=== w8 (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo451F.tmp", got L"\Users\winetest\AppData\Local\Temp\foo451E.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo4529.tmp", got L"\Users\winetest\AppData\Local\Temp\foo4528.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo455E.tmp", got L"\Users\winetest\AppData\Local\Temp\foo454D.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"foo45AC.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"foo45DA.tmp"
=== w8adm (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9FCB.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9FCA.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooA3AD.tmp", got L"\Users\winetest\AppData\Local\Temp\fooA3AC.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooA5B7.tmp", got L"\Users\winetest\AppData\Local\Temp\fooA5B6.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"fooA6D1.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooA8A4.tmp"
=== w864 (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9DE7.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9DE6.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9E00.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9DFF.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9E16.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9E15.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"foo9E64.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"foo9E92.tmp"
=== w1064v1507 (32 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooADD5.tmp", got L"\Users\winetest\AppData\Local\Temp\fooADD4.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooAE2D.tmp", got L"\Users\winetest\AppData\Local\Temp\fooAE2C.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooAF6C.tmp", got L"\Users\winetest\AppData\Local\Temp\fooAF6B.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"fooB0F2.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooB1EB.tmp"
=== w7pro64 (64 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooB8A6.tmp", got L"\Users\winetest\AppData\Local\Temp\fooB8A5.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooB8B0.tmp", got L"\Users\winetest\AppData\Local\Temp\fooB8AF.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooB8D6.tmp", got L"\Users\winetest\AppData\Local\Temp\fooB8D5.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"fooB924.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooB951.tmp"
=== w864 (64 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9A9B.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9A9A.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9AA5.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9AA4.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\foo9ACA.tmp", got L"\Users\winetest\AppData\Local\Temp\foo9AC9.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"foo9B09.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"foo9B37.tmp"
=== w1064v1507 (64 bit report) ===
ntdll: file.c:1549: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1550: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1552: Test failed: file should not exist file.c:1554: Test failed: file should exist file.c:1560: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooAE04.tmp", got L"\Users\winetest\AppData\Local\Temp\fooAE03.tmp" file.c:1588: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1617: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1618: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1620: Test failed: file should not exist file.c:1651: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1685: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1719: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1720: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1722: Test failed: file should not exist file.c:1724: Test failed: file should exist file.c:1730: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooAFC3.tmp", got L"\Users\winetest\AppData\Local\Temp\fooAFC2.tmp" file.c:1767: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1807: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1843: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1876: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:1877: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:1879: Test failed: file should not exist file.c:1913: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:1950: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:1986: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2025: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2059: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2092: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2125: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2126: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2128: Test failed: file should not exist file.c:2130: Test failed: file should exist file.c:2136: Test failed: FileName expected L"\Users\winetest\AppData\Local\Temp\fooB1DD.tmp", got L"\Users\winetest\AppData\Local\Temp\fooB1DC.tmp" file.c:2162: Test failed: got io status 0xdeadbeef file.c:2163: Test failed: got status c0000003 file.c:2206: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2207: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2211: Test failed: file should exist file.c:2245: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2274: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2275: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2305: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2306: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2317: Test failed: Link did not change casing on existing target file: got L"fooB3B2.tmp" file.c:2348: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2382: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2418: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2466: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2501: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2539: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2575: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2612: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2650: Test failed: res expected STATUS_OBJECT_NAME_COLLISION or STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2688: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2728: Test failed: res expected STATUS_FILE_IS_A_DIRECTORY, got c0000003 file.c:2762: Test failed: res expected STATUS_OBJECT_NAME_COLLISION, got c0000003 file.c:2795: Test failed: res expected STATUS_ACCESS_DENIED, got c0000003 file.c:2828: Test failed: io.Status expected STATUS_SUCCESS, got deadbeef file.c:2829: Test failed: res expected STATUS_SUCCESS, got c0000003 file.c:2833: Test failed: file should exist file.c:2866: Test failed: got status c0000003 file.c:2871: Test failed: got io status 0xdeadbeef file.c:2872: Test failed: got status c0000003 file.c:2897: Test failed: got status c0000003 file.c:2902: Test failed: got io status 0xdeadbeef file.c:2903: Test failed: got status c0000003 file.c:2911: Test failed: Link did not change casing on same file: got L"fooB4AA.tmp"
On Mon Sep 18 17:41:17 2023 +0000, Alexandre Julliard wrote:
Please avoid indenting the ok() statements when adding todo, it makes it hard to see what really changed, plus it will have to change again when removing the todo.
Ok no problem. Just pushed a new patch set with the preferred formatting.
What I meant is that you should add the todo on a separate line, before the ok(), without touching the ok line at all.