summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestLaunch.cxx
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2014-12-05 17:47:18 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2014-12-05 17:47:18 (GMT)
commit29b0c8c3606f07f3baee245138552c3c0256ded6 (patch)
tree33c118dd36196acb7844b93d81c98ecce8699941 /Source/CTest/cmCTestLaunch.cxx
parent356f7cf4457271ee85a71face453ea9579f05da3 (diff)
downloadCMake-29b0c8c3606f07f3baee245138552c3c0256ded6.zip
CMake-29b0c8c3606f07f3baee245138552c3c0256ded6.tar.gz
CMake-29b0c8c3606f07f3baee245138552c3c0256ded6.tar.bz2
ctest --launch: write to cout and cerr in binary
Because ctest reads in binary but writes in text mode, Windows' newline transformation can be applied multiple times causing '\n' in the source application to be written out as '\r\r\n' instead.
Diffstat (limited to 'Source/CTest/cmCTestLaunch.cxx')
-rw-r--r--Source/CTest/cmCTestLaunch.cxx13
1 files changed, 13 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestLaunch.cxx b/Source/CTest/cmCTestLaunch.cxx
index b65d23b..77c5d57 100644
--- a/Source/CTest/cmCTestLaunch.cxx
+++ b/Source/CTest/cmCTestLaunch.cxx
@@ -21,6 +21,12 @@
#include <cmsys/RegularExpression.hxx>
#include <cmsys/FStream.hxx>
+#ifdef _WIN32
+#include <io.h> // for _setmode
+#include <fcntl.h> // for _O_BINARY
+#include <stdio.h> // for std{out,err} and fileno
+#endif
+
//----------------------------------------------------------------------------
cmCTestLaunch::cmCTestLaunch(int argc, const char* const* argv)
{
@@ -259,6 +265,13 @@ void cmCTestLaunch::RunChild()
std::ios::out | std::ios::binary);
}
+#ifdef _WIN32
+ // Do this so that newline transformation is not done when writing to cout
+ // and cerr below.
+ _setmode(fileno(stdout), _O_BINARY);
+ _setmode(fileno(stderr), _O_BINARY);
+#endif
+
// Run the real command.
cmsysProcess_Execute(cp);