From 11ad814fa34287f297671297bd89bf93bcb2ee7b Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 19 Feb 2023 09:52:28 +0000 Subject: win32: only change console mode if necessary In skip_ansi_emulation() only call SetConsoleMode() if the new mode differs from the current mode. --- win32/winansi.c | 17 ++++++++++------- 1 file 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) if (is_console(STDOUT_FILENO)) { HANDLE h = get_console(); - DWORD mode; + DWORD oldmode, newmode; - if (GetConsoleMode(h, &mode)) { + if (GetConsoleMode(h, &oldmode)) { + newmode = oldmode; if (skip) - mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; + newmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; else - mode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING; - mode &= ~DISABLE_NEWLINE_AUTO_RETURN; - if (!SetConsoleMode(h, mode) && skip == 2) - skip = 0; + newmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING; + newmode &= ~DISABLE_NEWLINE_AUTO_RETURN; + if (newmode != oldmode) { + if (!SetConsoleMode(h, newmode) && skip == 2) + skip = 0; + } } } } -- cgit v1.2.3-55-g6feb