aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2023-08-20 12:53:10 +0100
committerRon Yorston <rmy@pobox.com>2023-08-20 13:35:20 +0100
commit67ed7484be88e3be5a5a51f404f1325a569be173 (patch)
tree095e176c3a09fdef23831852a87964d35b5470b2 /shell/ash.c
parent77aa74d151643ff2ec96156942e004fba19464a5 (diff)
downloadbusybox-w32-noconsole2.tar.gz
busybox-w32-noconsole2.tar.bz2
busybox-w32-noconsole2.zip
ash: detect console state on shell start upnoconsole2
Set 'noconsole' to match the actual state of the console (normal/ iconified) when the shell is started. Thus ShowWindow() will only be called if the actual state differs from the default or user defined state. Costs 20-24 bytes. (GitHub issue #325)
Diffstat (limited to 'shell/ash.c')
-rw-r--r--shell/ash.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 41bf45734..2ea87a049 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -252,6 +252,7 @@
252#endif 252#endif
253#if ENABLE_PLATFORM_MINGW32 253#if ENABLE_PLATFORM_MINGW32
254# include <conio.h> 254# include <conio.h>
255# include "lazyload.h"
255#endif 256#endif
256 257
257/* So far, all bash compat is controlled by one config option */ 258/* So far, all bash compat is controlled by one config option */
@@ -2994,6 +2995,33 @@ setwinxp(int on)
2994 } 2995 }
2995 } 2996 }
2996} 2997}
2998
2999# if ENABLE_ASH_NOCONSOLE
3000/*
3001 * Console state is either:
3002 * 0 normal
3003 * 1 iconified
3004 * 2 unknown
3005 */
3006static int console_state(void)
3007{
3008 DECLARE_PROC_ADDR(BOOL, ShowWindow, HWND, int);
3009 DECLARE_PROC_ADDR(BOOL, IsIconic, HWND);
3010
3011 if (INIT_PROC_ADDR(user32.dll, ShowWindow) &&
3012 INIT_PROC_ADDR(user32.dll, IsIconic)) {
3013 return IsIconic(GetConsoleWindow()) != 0;
3014 }
3015 return 2;
3016}
3017
3018static void hide_console(int hide)
3019{
3020 // Switch console state if it's known and isn't the required state
3021 if (console_state() == !hide)
3022 ShowWindow(GetConsoleWindow(), hide ? SW_MINIMIZE : SW_NORMAL);
3023}
3024# endif
2997#endif 3025#endif
2998 3026
2999 3027
@@ -12616,6 +12644,9 @@ options(int *login_sh)
12616#if ENABLE_PLATFORM_MINGW32 12644#if ENABLE_PLATFORM_MINGW32
12617 dirarg = NULL; 12645 dirarg = NULL;
12618 title = NULL; 12646 title = NULL;
12647# if ENABLE_ASH_NOCONSOLE
12648 noconsole = console_state();
12649# endif
12619# if ENABLE_SUW32 12650# if ENABLE_SUW32
12620 delayexit = 0; 12651 delayexit = 0;
12621# endif 12652# endif