From b0425804290dc25092a2af1a6a05a4f8238a8c93 Mon Sep 17 00:00:00 2001 From: Colin D Bennett Date: Thu, 12 May 2016 11:09:51 -0700 Subject: Write subprocess output to stdout in binary mode Set stdout to binary mode while writing subprocess output, so that the CR in a CR LF sequence is not replaced with CR LF itself, which would result in CR CR LF. Based on patch posted by nico in issue #773 comment. --- src/build.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/build.cc b/src/build.cc index 7792016..e4fe21a 100644 --- a/src/build.cc +++ b/src/build.cc @@ -20,6 +20,11 @@ #include #include +#ifdef _WIN32 +#include +#include +#endif + #if defined(__SVR4) && defined(__sun) #include #endif @@ -160,7 +165,17 @@ void BuildStatus::BuildEdgeFinished(Edge* edge, final_output = StripAnsiEscapeCodes(output); else final_output = output; + +#ifdef _WIN32 + // Fix extra CR being added on Windows, writing out CR CR LF (#773) + _setmode(_fileno(stdout), _O_BINARY); // Begin Windows extra CR fix +#endif + printer_.PrintOnNewLine(final_output); + +#ifdef _WIN32 + _setmode(_fileno(stdout), _O_TEXT); // End Windows extra CR fix +#endif } } -- cgit v0.12