Rebase against 39797dcfb250c4b4497fa003ae67b873427daa37.

This commit is contained in:
Sebastian Lackner
2015-06-11 17:12:42 +02:00
parent a6f687dcc9
commit 2672e6b4c5
18 changed files with 176 additions and 695 deletions

View File

@@ -1,27 +0,0 @@
From 1866952edae5d4adabfc2fc32c2bde930af8cbe3 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 9 Jun 2015 06:14:49 +0200
Subject: include: Fix definition of FILE_DISPOSITION_INFO.
A member called DeleteFile cannot be accessed because its defined as
DeleteFile_must_be_suffixed_with_W_or_A_in_this_context.
---
include/winbase.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/winbase.h b/include/winbase.h
index 4795d87..44ecc92 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -860,7 +860,7 @@ typedef struct _FILE_ALLOCATION_INFO {
} FILE_ALLOCATION_INFO, *PFILE_ALLOCATION_INFO;
typedef struct _FILE_DISPOSITION_INFO {
- BOOLEAN DeleteFile;
+ BOOLEAN DoDeleteFile;
} FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO;
typedef struct _FILE_END_OF_FILE_INFO {
--
2.4.2

View File

@@ -1,145 +0,0 @@
From 10d1d2f0b8cdb956ef4d8df5386a446c97451b19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 26 Feb 2015 06:08:58 +0100
Subject: kernel32: Implement SetFileInformationByHandle.
---
dlls/kernel32/file.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++-
include/winbase.h | 1 +
2 files changed, 102 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index 4695c9c..bfb2a81 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -48,6 +48,22 @@
#include "wine/unicode.h"
#include "wine/debug.h"
+C_ASSERT(sizeof(FILE_BASIC_INFO) == sizeof(FILE_BASIC_INFORMATION));
+C_ASSERT(sizeof(FILE_STANDARD_INFO) == sizeof(FILE_STANDARD_INFORMATION));
+C_ASSERT(sizeof(FILE_NAME_INFO) == sizeof(FILE_NAME_INFORMATION));
+C_ASSERT(FIELD_OFFSET(FILE_RENAME_INFO, RootDirectory) == FIELD_OFFSET(FILE_RENAME_INFORMATION, RootDir));
+C_ASSERT(sizeof(FILE_RENAME_INFO) == sizeof(FILE_RENAME_INFORMATION));
+C_ASSERT(sizeof(FILE_DISPOSITION_INFO) == sizeof(FILE_DISPOSITION_INFORMATION));
+C_ASSERT(sizeof(FILE_ALLOCATION_INFO) == sizeof(FILE_ALLOCATION_INFORMATION));
+C_ASSERT(sizeof(FILE_END_OF_FILE_INFO) == sizeof(FILE_END_OF_FILE_INFORMATION));
+C_ASSERT(sizeof(FILE_STREAM_INFO) == sizeof(FILE_STREAM_INFORMATION));
+/* C_ASSERT(sizeof(FILE_COMPRESSION_INFO) == sizeof(FILE_COMPRESSION_INFORMATION)); */
+C_ASSERT(sizeof(FILE_ATTRIBUTE_TAG_INFO) == sizeof(FILE_ATTRIBUTE_TAG_INFORMATION));
+/* C_ASSERT(sizeof(FILE_ID_BOTH_DIR_INFO) == sizeof(FILE_ID_BOTH_DIR_INFORMATION)); */
+/* C_ASSERT(sizeof(FILE_IO_PRIORITY_HINT_INFO) == sizeof(FILE_IO_PRIORITY_HINT_INFORMATION)); */
+C_ASSERT(sizeof(FILE_FULL_DIR_INFO) == sizeof(FILE_FULL_DIR_INFORMATION));
+/* C_ASSERT(sizeof(FILE_ALIGNMENT_INFO) == sizeof(FILE_ALIGNMENT_INFORMATION)); */
+
WINE_DEFAULT_DEBUG_CHANNEL(file);
/* info structure for FindFirstFile handle */
@@ -1051,7 +1067,91 @@ BOOL WINAPI SetFileCompletionNotificationModes( HANDLE file, UCHAR flags )
BOOL WINAPI SetFileInformationByHandle( HANDLE file, FILE_INFO_BY_HANDLE_CLASS class, VOID *info, DWORD size )
{
- FIXME("%p %u %p %u - stub\n", file, class, info, size);
+ IO_STATUS_BLOCK io;
+ FILE_INFORMATION_CLASS ntclass;
+ NTSTATUS status;
+
+ TRACE("%p %u %p %u\n", file, class, info, size);
+
+ switch (class)
+ {
+ /* make sure that the kernel32 and NT structures are identical */
+ case FileBasicInfo:
+ /* FILE_BASIC_INFO matches FILE_BASIC_INFORMATION */
+ ntclass = FileBasicInformation;
+ break;
+ case FileStandardInfo:
+ /* FILE_STANDARD_INFO matches FILE_STANDARD_INFORMATION */
+ ntclass = FileStandardInformation;
+ break;
+ case FileNameInfo:
+ /* FILE_NAME_INFO matches FILE_NAME_INFORMATION */
+ ntclass = FileNameInformation;
+ break;
+ case FileRenameInfo:
+ /* FILE_RENAME_INFO matches FILE_RENAME_INFORMATION,
+ * except BOOL <-> BOOLEAN. */
+ ntclass = FileRenameInformation;
+ break;
+ case FileDispositionInfo:
+ /* FILE_DISPOSITION_INFO matches FILE_DISPOSITION_INFORMATION,
+ * except BOOL <-> BOOLEAN. */
+ ntclass = FileDispositionInformation;
+ break;
+ case FileAllocationInfo:
+ /* FILE_ALLOCATION_INFO matches FILE_ALLOCATION_INFORMATION */
+ ntclass = FileAllocationInformation;
+ break;
+ case FileEndOfFileInfo:
+ /* FILE_END_OF_FILE_INFO matches FILE_END_OF_FILE_INFORMATION */
+ ntclass = FileEndOfFileInformation;
+ break;
+ case FileStreamInfo:
+ /* FILE_STREAM_INFO matches FILE_STREAM_INFORMATION */
+ ntclass = FileStreamInformation;
+ break;
+ case FileCompressionInfo:
+ /* FILE_COMPRESSION_INFO matches FILE_COMPRESSION_INFORMATION */
+ ntclass = FileCompressionInformation;
+ break;
+ case FileAttributeTagInfo:
+ /* FILE_ATTRIBUTE_TAG_INFO matches FILE_ATTRIBUTE_TAG_INFORMATION */
+ ntclass = FileAttributeTagInformation;
+ break;
+ case FileIdBothDirectoryInfo:
+ /* FILE_ID_BOTH_DIR_INFO matches FILE_ID_BOTH_DIR_INFORMATION */
+ ntclass = FileIdBothDirectoryInformation;
+ break;
+ case FileIoPriorityHintInfo:
+ /* FILE_IO_PRIORITY_HINT_INFO matches FILE_IO_PRIORITY_HINT_INFORMATION */
+ ntclass = FileIoPriorityHintInformation;
+ break;
+ case FileFullDirectoryInfo:
+ /* FILE_FULL_DIR_INFO matches FILE_FULL_DIR_INFORMATION */
+ ntclass = FileFullDirectoryInformation;
+ break;
+ case FileAlignmentInfo:
+ /* FILE_ALIGNMENT_INFO matches FILE_ALIGNMENT_INFORMATION */
+ ntclass = FileAlignmentInformation;
+ break;
+
+ /* do not have a NT equivalent with same structure */
+ case FileFullDirectoryRestartInfo:
+ case FileIdBothDirectoryRestartInfo:
+ case FileIdExtdDirectoryInfo:
+ case FileIdInfo:
+ case FileRemoteProtocolInfo:
+ case FileStorageInfo:
+ default:
+ FIXME("unsupported class: %u\n", class);
+ SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
+ return FALSE;
+ }
+
+ status = NtSetInformationFile( file, &io, info, size, ntclass );
+
+ if (status == STATUS_SUCCESS) return TRUE;
+ SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
diff --git a/include/winbase.h b/include/winbase.h
index 6e6da9b..0d20107 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2466,6 +2466,7 @@ WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD);
WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD);
#define SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)
WINBASEAPI BOOL WINAPI SetFileCompletionNotificationModes(HANDLE,UCHAR);
+WINBASEAPI BOOL WINAPI SetFileInformationByHandle(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD);
WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD);
WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD);
WINADVAPI BOOL WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
--
2.4.0

View File

@@ -1,2 +0,0 @@
Fixes: Implement SetFileInformationByHandle
Depends: kernel32-SetFileCompletionNotificationMode