X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=cbits%2FconsUtils.c;h=e0294b21c99b2903622cb4a3e0085efc74ed318e;hb=30464c0cb915c2ae900909568fa8677bba341e45;hp=fd514408d3e4c4da2f5bf57de83799de960915fc;hpb=2f71a076d6210da9fe91641a8bf9787d13c58ee5;p=haskell-directory.git diff --git a/cbits/consUtils.c b/cbits/consUtils.c index fd51440..e0294b2 100644 --- a/cbits/consUtils.c +++ b/cbits/consUtils.c @@ -3,15 +3,15 @@ * * Win32 Console API support */ -#include "config.h" -#if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS) +#include "ghcconfig.h" +#if defined(mingw32_HOST_OS) || defined(cygwin32_HOST_OS) || defined(__MINGW32__) || defined(_MSC_VER) /* to the end */ #include "consUtils.h" #include #include -#if defined(cygwin32_TARGET_OS) +#if defined(cygwin32_HOST_OS) #define _get_osfhandle get_osfhandle #endif @@ -64,4 +64,26 @@ get_console_echo__(int fd) return -1; } -#endif /* defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS) */ +int +flush_input_console__(int fd) +{ + 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; + } + } + /* ToDo: translate GetLastError() into something errno-friendly */ + return -1; +} + +#endif /* defined(mingw32_HOST_OS) || ... */