aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg.cpp
diff options
context:
space:
mode:
authorMikhail Paulyshka <me@mixaill.tk>2017-08-23 00:48:39 +0300
committerAlexander Karatarakis <alkarata@microsoft.com>2017-08-25 17:27:11 -0700
commitaf017922974c4612517fe9c512df7cdd1ac79b43 (patch)
tree3bae43e6dbd4f9d969c80a922fb07e95cc5b004a /toolsrc/src/vcpkg.cpp
parent98ee8a949ad4bfdfa9bf0411b552a23c923eaff7 (diff)
downloadvcpkg-af017922974c4612517fe9c512df7cdd1ac79b43.tar.gz
vcpkg-af017922974c4612517fe9c512df7cdd1ac79b43.zip
[vcpkg] use UTF-8 for console input/output
Diffstat (limited to 'toolsrc/src/vcpkg.cpp')
-rw-r--r--toolsrc/src/vcpkg.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp
index 9da501ec0..fc9b1a016 100644
--- a/toolsrc/src/vcpkg.cpp
+++ b/toolsrc/src/vcpkg.cpp
@@ -18,6 +18,30 @@
using namespace vcpkg;
+UINT console_cp_input;
+UINT console_cp_output;
+
+void console_cp_set()
+{
+ console_cp_input = GetConsoleCP();
+ console_cp_output = GetConsoleOutputCP();
+
+ SetConsoleCP(CP_UTF8);
+ SetConsoleOutputCP(CP_UTF8);
+}
+
+void console_cp_reset()
+{
+ SetConsoleCP(console_cp_input);
+ SetConsoleOutputCP(console_cp_output);
+}
+
+BOOL console_ctrl_handler(DWORD fdwCtrlType)
+{
+ console_cp_reset();
+ return TRUE;
+}
+
void invalid_command(const std::string& cmd)
{
System::println(System::Color::error, "invalid command: %s", cmd);
@@ -192,6 +216,10 @@ int wmain(const int argc, const wchar_t* const* const argv)
{
if (argc == 0) std::abort();
+ console_cp_set();
+ SetConsoleCtrlHandler(PHANDLER_ROUTINE(console_ctrl_handler), TRUE);
+ atexit(console_cp_reset);
+
*GlobalState::timer.lock() = ElapsedTime::create_started();
// Checks::register_console_ctrl_handler();