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.schinde...@gmx.de>
> ---
>  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 */
> 

Reply via email to