diff options
author | Dāvis Mosāns <davispuh@gmail.com> | 2016-11-23 12:11:40 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-11-30 14:06:51 (GMT) |
commit | 2ed473b3b8e28485e6a14a49c7e0e4133eb02eee (patch) | |
tree | 1343f0e826693c923074102e588f90f0678e3cc5 /Tests/CMakeLib/testEncoding.cxx | |
parent | 076aef8e45a91e83f9a7d879712fd70778d67c92 (diff) | |
download | CMake-2ed473b3b8e28485e6a14a49c7e0e4133eb02eee.zip CMake-2ed473b3b8e28485e6a14a49c7e0e4133eb02eee.tar.gz CMake-2ed473b3b8e28485e6a14a49c7e0e4133eb02eee.tar.bz2 |
execute_process: Add ENCODING option for Windows child process output
Different applications can use different output encodings.
Diffstat (limited to 'Tests/CMakeLib/testEncoding.cxx')
-rw-r--r-- | Tests/CMakeLib/testEncoding.cxx | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Tests/CMakeLib/testEncoding.cxx b/Tests/CMakeLib/testEncoding.cxx new file mode 100644 index 0000000..88743b0 --- /dev/null +++ b/Tests/CMakeLib/testEncoding.cxx @@ -0,0 +1,49 @@ +#include <fstream> +#include <iostream> +#include <string> + +#include <cmsys/ConsoleBuf.hxx> + +#ifdef _WIN32 +void setEncoding(cmsys::ConsoleBuf::Manager& buf, UINT codepage) +{ + cmsys::ConsoleBuf* cb = buf.GetConsoleBuf(); + if (cb) { + cb->input_pipe_codepage = codepage; + cb->output_pipe_codepage = codepage; + cb->input_file_codepage = codepage; + cb->output_file_codepage = codepage; + cb->activateCodepageChange(); + } +} +#endif + +int main(int argc, char* argv[]) +{ +#ifdef _WIN32 + cmsys::ConsoleBuf::Manager consoleOut(std::cout); +#endif + if (argc <= 2) { + std::cout << "Usage: testEncoding <encoding> <file>" << std::endl; + return 1; + } + const std::string encoding(argv[1]); +#ifdef _WIN32 + if (encoding == "UTF8") { + setEncoding(consoleOut, CP_UTF8); + } else if (encoding == "ANSI") { + setEncoding(consoleOut, CP_ACP); + } else if (encoding == "OEM") { + setEncoding(consoleOut, CP_OEMCP); + } // else AUTO +#endif + std::ifstream file(argv[2]); + if (!file.is_open()) { + std::cout << "Failed to open file: " << argv[2] << std::endl; + return 2; + } + std::string text((std::istreambuf_iterator<char>(file)), + std::istreambuf_iterator<char>()); + std::cout << text; + return 0; +} |