diff options
author | Johnny Jazeix <jazeix@gmail.com> | 2020-10-13 21:48:12 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-10-14 16:08:07 (GMT) |
commit | f7a5f283188c1e51b0fb549f0a78afaf1d570383 (patch) | |
tree | c5fade762b9cada9b7fd9cf964528c43ccd45c80 /Source/cmakemain.cxx | |
parent | 90b39a52090e6ba52424b441d5827b2b6e11ff56 (diff) | |
download | CMake-f7a5f283188c1e51b0fb549f0a78afaf1d570383.zip CMake-f7a5f283188c1e51b0fb549f0a78afaf1d570383.tar.gz CMake-f7a5f283188c1e51b0fb549f0a78afaf1d570383.tar.bz2 |
cmake: Fix '-E cat' command for binary files on Windows
Reset `std::cout` to write in binary mode with no encoding conversions.
Co-Author: Brad King <brad.king@kitware.com>
Fixes: #21295
Diffstat (limited to 'Source/cmakemain.cxx')
-rw-r--r-- | Source/cmakemain.cxx | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index eb44329..7e589c0 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -9,8 +9,10 @@ #include <cstring> #include <iostream> #include <string> +#include <utility> #include <vector> +#include <cm/memory> #include <cmext/algorithm> #include <cm3p/uv.h> @@ -107,13 +109,14 @@ const char* cmDocumentationOptions[][2] = { #endif -int do_command(int ac, char const* const* av) +int do_command(int ac, char const* const* av, + std::unique_ptr<cmConsoleBuf> consoleBuf) { std::vector<std::string> args; args.reserve(ac - 1); args.emplace_back(av[0]); cm::append(args, av + 2, av + ac); - return cmcmd::ExecuteCMakeCommand(args); + return cmcmd::ExecuteCMakeCommand(args, std::move(consoleBuf)); } cmMakefile* cmakemainGetMakefile(cmake* cm) @@ -687,8 +690,8 @@ int main(int ac, char const* const* av) cmSystemTools::EnsureStdPipes(); // Replace streambuf so we can output Unicode to console - cmConsoleBuf consoleBuf; - consoleBuf.SetUTF8Pipes(); + auto consoleBuf = cm::make_unique<cmConsoleBuf>(); + consoleBuf->SetUTF8Pipes(); cmsys::Encoding::CommandLineArguments args = cmsys::Encoding::CommandLineArguments::Main(ac, av); @@ -708,7 +711,7 @@ int main(int ac, char const* const* av) return do_open(ac, av); } if (strcmp(av[1], "-E") == 0) { - return do_command(ac, av); + return do_command(ac, av, std::move(consoleBuf)); } } int ret = do_cmake(ac, av); |