From cd5838fc7fe3995563257c3f4c1b8436a5ae4ec1 Mon Sep 17 00:00:00 2001 From: Luminyx <27lumi@protonmail.com> Date: Wed, 18 Feb 2026 21:30:45 -0500 Subject: [PATCH] Windows: Don't re-attach stdio when piping output (#1812) --- src/main.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9355465e..df2b57fb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -167,18 +167,28 @@ void UnitTests() bool isConsoleConnected = false; void requireConsole() { - #if BOOST_OS_WINDOWS - if (isConsoleConnected) - return; + #if BOOST_OS_WINDOWS + if (isConsoleConnected) + return; - if (AttachConsole(ATTACH_PARENT_PROCESS) != FALSE) - { - freopen("CONIN$", "r", stdin); - freopen("CONOUT$", "w", stdout); - freopen("CONOUT$", "w", stderr); - isConsoleConnected = true; - } - #endif + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD dwFileType = GetFileType(hOut); + + if (dwFileType == FILE_TYPE_UNKNOWN || dwFileType == FILE_TYPE_CHAR) + { + if (AttachConsole(ATTACH_PARENT_PROCESS) != FALSE) + { + freopen("CONOUT$", "w", stdout); + freopen("CONOUT$", "w", stderr); + freopen("CONIN$", "r", stdin); + isConsoleConnected = true; + } + } + else + { + isConsoleConnected = true; + } + #endif } void HandlePostUpdate()