summary refs log tree commit diff stats
path: root/lib/std/syncio.nim
diff options
context:
space:
mode:
authorrockcavera <rockcavera@gmail.com>2022-11-18 03:41:46 -0300
committerGitHub <noreply@github.com>2022-11-18 07:41:46 +0100
commitfe43f751eb9a83f84cc93aa0d752c3658232002d (patch)
treed1eedf65e7f8376cdcfd581abc5fee9a49c481c8 /lib/std/syncio.nim
parent68f6926348da35c82a637ec3bc7f9ea0d761f615 (diff)
downloadNim-fe43f751eb9a83f84cc93aa0d752c3658232002d.tar.gz
fix #20835 (#20872)
Update syncio.nim
Diffstat (limited to 'lib/std/syncio.nim')
-rw-r--r--lib/std/syncio.nim23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/std/syncio.nim b/lib/std/syncio.nim
index 16abc5afe..dcbed9cdd 100644
--- a/lib/std/syncio.nim
+++ b/lib/std/syncio.nim
@@ -810,14 +810,33 @@ when defined(windows) and not defined(nimscript) and not defined(js):
 
 when defined(windows) and appType == "console" and
     not defined(nimDontSetUtf8CodePage) and not defined(nimscript):
+  import std/exitprocs
+
   proc setConsoleOutputCP(codepage: cuint): int32 {.stdcall, dynlib: "kernel32",
     importc: "SetConsoleOutputCP".}
   proc setConsoleCP(wCodePageID: cuint): int32 {.stdcall, dynlib: "kernel32",
     importc: "SetConsoleCP".}
+  proc getConsoleOutputCP(): cuint {.stdcall, dynlib: "kernel32",
+    importc: "GetConsoleOutputCP".}
+  proc getConsoleCP(): cuint {.stdcall, dynlib: "kernel32",
+    importc: "GetConsoleCP".}
 
   const Utf8codepage = 65001
-  discard setConsoleOutputCP(Utf8codepage)
-  discard setConsoleCP(Utf8codepage)
+
+  let
+    consoleOutputCP = getConsoleOutputCP()
+    consoleCP = getConsoleCP()
+
+  proc restoreConsoleOutputCP() = discard setConsoleOutputCP(consoleOutputCP)
+  proc restoreConsoleCP() = discard setConsoleCP(consoleCP)
+
+  if consoleOutputCP != Utf8codepage:
+    discard setConsoleOutputCP(Utf8codepage)
+    addExitProc(restoreConsoleOutputCP)
+
+  if consoleCP != Utf8codepage:
+    discard setConsoleCP(Utf8codepage)
+    addExitProc(restoreConsoleCP)
 
 proc readFile*(filename: string): string {.tags: [ReadIOEffect], benign.} =
   ## Opens a file named `filename` for reading, calls `readAll