diff options
author | rockcavera <rockcavera@gmail.com> | 2022-11-18 03:41:46 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-18 07:41:46 +0100 |
commit | fe43f751eb9a83f84cc93aa0d752c3658232002d (patch) | |
tree | d1eedf65e7f8376cdcfd581abc5fee9a49c481c8 /lib/std/syncio.nim | |
parent | 68f6926348da35c82a637ec3bc7f9ea0d761f615 (diff) | |
download | Nim-fe43f751eb9a83f84cc93aa0d752c3658232002d.tar.gz |
fix #20835 (#20872)
Update syncio.nim
Diffstat (limited to 'lib/std/syncio.nim')
-rw-r--r-- | lib/std/syncio.nim | 23 |
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 |