X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=cbits%2FconsUtils.c;h=7c50c7b9b5b1ea0935f3272ba14ddfa51529626e;hb=2b88e86142ffbf79dad8596082ec301627a5682c;hp=bb9e154e86afda1b4b6ad7c7309f58754f060d5d;hpb=2cedb18441a5e7287d0361d5673f776e7bf9c6be;p=ghc-base.git diff --git a/cbits/consUtils.c b/cbits/consUtils.c index bb9e154..7c50c7b 100644 --- a/cbits/consUtils.c +++ b/cbits/consUtils.c @@ -3,15 +3,14 @@ * * Win32 Console API support */ -#include "ghcconfig.h" -#if defined(mingw32_HOST_OS) || defined(cygwin32_HOST_OS) || defined(__MINGW32__) || defined(_MSC_VER) +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) || defined(__CYGWIN__) /* to the end */ #include "consUtils.h" #include #include -#if defined(cygwin32_HOST_OS) +#if defined(__CYGWIN__) #define _get_osfhandle get_osfhandle #endif @@ -67,8 +66,17 @@ get_console_echo__(int fd) int flush_input_console__(int fd) { - HANDLE h; - if ( (h = (HANDLE)_get_osfhandle(fd)) != INVALID_HANDLE_VALUE ) { + HANDLE h = (HANDLE)_get_osfhandle(fd); + + if ( h != INVALID_HANDLE_VALUE ) { + /* If the 'fd' isn't connected to a console; treat the flush + * operation as a NOP. + */ + DWORD unused; + if ( !GetConsoleMode(h,&unused) && + GetLastError() == ERROR_INVALID_HANDLE ) { + return 0; + } if ( FlushConsoleInputBuffer(h) ) { return 0; } @@ -77,4 +85,4 @@ flush_input_console__(int fd) return -1; } -#endif /* defined(mingw32_HOST_OS) || ... */ +#endif /* defined(__MINGW32__) || ... */