X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=cbits%2FconsUtils.c;h=b20eb7ae07c496c55b20c8943fc058b868863aab;hb=3a7e8de77666fab3f6d2a7fc5c813cbca77ad57d;hp=7c50c7b9b5b1ea0935f3272ba14ddfa51529626e;hpb=be4fe555ee7131de29623b723cb3c37cb32f4594;p=ghc-base.git diff --git a/cbits/consUtils.c b/cbits/consUtils.c index 7c50c7b..b20eb7a 100644 --- a/cbits/consUtils.c +++ b/cbits/consUtils.c @@ -14,6 +14,29 @@ #define _get_osfhandle get_osfhandle #endif +int is_console__(int fd) { + DWORD st; + HANDLE h; + if (!_isatty(fd)) { + /* TTY must be a character device */ + return 0; + } + h = (HANDLE)_get_osfhandle(fd); + if (h == INVALID_HANDLE_VALUE) { + /* Broken handle can't be terminal */ + return 0; + } + if (!GetConsoleMode(h, &st)) { + /* GetConsoleMode appears to fail when it's not a TTY. In + particular, it's what most of our terminal functions + assume works, so if it doesn't work for all intents + and purposes we're not dealing with a terminal. */ + return 0; + } + return 1; +} + + int set_console_buffering__(int fd, int cooked) {