Piotr Caban : kernel32: Handle STD_*_HANDLE in GetFileType.

Alexandre Julliard julliard at winehq.org
Fri Feb 7 10:13:44 CST 2014


Module: wine
Branch: master
Commit: afadda8ff72a67279c61c0c6aac3c3b4391a2531
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=afadda8ff72a67279c61c0c6aac3c3b4391a2531

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Fri Feb  7 15:40:06 2014 +0100

kernel32: Handle STD_*_HANDLE in GetFileType.

---

 dlls/kernel32/file.c       |    4 ++++
 dlls/kernel32/tests/file.c |    7 ++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index bdae8f4..2f5dee2 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -817,6 +817,10 @@ DWORD WINAPI GetFileType( HANDLE hFile )
     IO_STATUS_BLOCK io;
     NTSTATUS status;
 
+    if (hFile == (HANDLE)STD_INPUT_HANDLE || hFile == (HANDLE)STD_OUTPUT_HANDLE
+            || hFile == (HANDLE)STD_ERROR_HANDLE)
+        hFile = GetStdHandle((DWORD_PTR)hFile);
+
     if (is_console_handle( hFile )) return FILE_TYPE_CHAR;
 
     status = NtQueryVolumeInformationFile( hFile, &io, &info, sizeof(info), FileFsDeviceInformation );
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index f89e5af..b1b36bb 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -2686,7 +2686,7 @@ static void test_MapFile(void)
 
 static void test_GetFileType(void)
 {
-    DWORD type;
+    DWORD type, type2;
     HANDLE h = CreateFileA( filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 );
     ok( h != INVALID_HANDLE_VALUE, "open %s failed\n", filename );
     type = GetFileType(h);
@@ -2698,6 +2698,11 @@ static void test_GetFileType(void)
     ok( type == FILE_TYPE_CHAR, "expected type char for nul got %d\n", type );
     CloseHandle( h );
     DeleteFileA( filename );
+    h = GetStdHandle( STD_OUTPUT_HANDLE );
+    ok( h != INVALID_HANDLE_VALUE, "GetStdHandle failed\n" );
+    type = GetFileType( (HANDLE)STD_OUTPUT_HANDLE );
+    type2 = GetFileType( h );
+    ok(type == type2, "expected type %d for STD_OUTPUT_HANDLE got %d\n", type2, type);
 }
 
 static int completion_count;




More information about the wine-cvs mailing list