aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2023-02-19 09:52:28 +0000
committerRon Yorston <rmy@pobox.com>2023-02-19 09:52:28 +0000
commit11ad814fa34287f297671297bd89bf93bcb2ee7b (patch)
treeb592eb14e944b6854c66d2006dcef7293a364b7a
parent329f907b27405b3044a83b728109ceff0decef61 (diff)
downloadbusybox-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.c17
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 }