aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-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