mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)
authorKarsten Blees <blees@dcon.de>
Wed, 27 Apr 2016 15:16:37 +0000 (17:16 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 26 May 2016 20:12:02 +0000 (13:12 -0700)
commitf7f90e0f4f58d493242078d17c0eba41dd3f1f79
tree6c76c808e7079ca145d87bf32e046e01f5510498
parent0f8e831356d4f1a34baf46bb1a6b2d4c89ec9cb8
mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

MSYS2 emulates pseudo terminals via named pipes, and isatty() returns 0
for such file descriptors. Therefore, some interactive functionality
(such as launching a pager, asking if a failed unlink should be repeated
etc.) doesn't work when run in a terminal emulator that uses MSYS2's
ptys (such as mintty).

However, MSYS2 uses special names for its pty pipes ('msys-*-pty*'),
which allows us to distinguish them from normal piped input / output.

On startup, check if stdin / stdout / stderr are connected to such pipes
using the NtQueryObject API from NTDll.dll. If the names match, adjust
the flags in MSVCRT's ioinfo structure accordingly.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/winansi.c
config.mak.uname