From afadda8ff72a67279c61c0c6aac3c3b4391a2531 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Fri, 7 Feb 2014 15:40:06 +0100 Subject: [PATCH] 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 bdae8f4ebbb..2f5dee2855e 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 f89e5af7fc2..b1b36bbea46 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;