diff options
author | Ron Yorston <rmy@pobox.com> | 2023-02-19 09:52:28 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2023-02-19 09:52:28 +0000 |
commit | 11ad814fa34287f297671297bd89bf93bcb2ee7b (patch) | |
tree | b592eb14e944b6854c66d2006dcef7293a364b7a | |
parent | 329f907b27405b3044a83b728109ceff0decef61 (diff) | |
download | busybox-w32-11ad814fa34287f297671297bd89bf93bcb2ee7b.tar.gz busybox-w32-11ad814fa34287f297671297bd89bf93bcb2ee7b.tar.bz2 busybox-w32-11ad814fa34287f297671297bd89bf93bcb2ee7b.zip |
win32: only change console mode if necessary
In skip_ansi_emulation() only call SetConsoleMode() if the new
mode differs from the current mode.
-rw-r--r-- | win32/winansi.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/win32/winansi.c b/win32/winansi.c index 9db11cddb..27559e3f5 100644 --- a/win32/winansi.c +++ b/win32/winansi.c | |||
@@ -84,16 +84,19 @@ int skip_ansi_emulation(int reset) | |||
84 | 84 | ||
85 | if (is_console(STDOUT_FILENO)) { | 85 | if (is_console(STDOUT_FILENO)) { |
86 | HANDLE h = get_console(); | 86 | HANDLE h = get_console(); |
87 | DWORD mode; | 87 | DWORD oldmode, newmode; |
88 | 88 | ||
89 | if (GetConsoleMode(h, &mode)) { | 89 | if (GetConsoleMode(h, &oldmode)) { |
90 | newmode = oldmode; | ||
90 | if (skip) | 91 | if (skip) |
91 | mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; | 92 | newmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; |
92 | else | 93 | else |
93 | mode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING; | 94 | newmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING; |
94 | mode &= ~DISABLE_NEWLINE_AUTO_RETURN; | 95 | newmode &= ~DISABLE_NEWLINE_AUTO_RETURN; |
95 | if (!SetConsoleMode(h, mode) && skip == 2) | 96 | if (newmode != oldmode) { |
96 | skip = 0; | 97 | if (!SetConsoleMode(h, newmode) && skip == 2) |
98 | skip = 0; | ||
99 | } | ||
97 | } | 100 | } |
98 | } | 101 | } |
99 | } | 102 | } |