On 22.12.16 18:08, Johannes Schindelin wrote: > When determining whether a handle corresponds to a *real* Win32 Console > (as opposed to, say, a character device such as /dev/null), we use the > GetConsoleOutputBufferInfo() function as a tell-tale. > > However, that does not work for *input* handles associated with a > console. Let's just use the GetConsoleMode() function for input handles, > and since it does not work on output handles fall back to the previous > method for those. > > This patch prepares for using is_console() instead of my previous > misguided attempt in cbb3f3c9b1 (mingw: intercept isatty() to handle > /dev/null as Git expects it, 2016-12-11) that broke everything on > Windows. > > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > compat/winansi.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/compat/winansi.c b/compat/winansi.c > index cb725fb02f..590d61cb1b 100644 > --- a/compat/winansi.c > +++ b/compat/winansi.c > @@ -84,6 +84,7 @@ static void warn_if_raster_font(void) > static int is_console(int fd) > { > CONSOLE_SCREEN_BUFFER_INFO sbi; > + DWORD mode; Nit: can we move this definition into the block below where it's used? > HANDLE hcon; > > static int initialized = 0; > @@ -98,7 +99,10 @@ static int is_console(int fd) > return 0; > > /* check if its a handle to a console output screen buffer */ > - if (!GetConsoleScreenBufferInfo(hcon, &sbi)) > + if (!fd) { Right here: + DWORD mode; > + if (!GetConsoleMode(hcon, &mode)) > + return 0; > + } else if (!GetConsoleScreenBufferInfo(hcon, &sbi)) > return 0; > > /* initialize attributes */ >