Module: wine Branch: master Commit: 26e04d52fe466e44eb5ca383c94c2920c5e294ec URL: https://source.winehq.org/git/wine.git/?a=commit;h=26e04d52fe466e44eb5ca383c...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Aug 31 15:11:23 2020 +0200
kernelbase: Move KERNEL32_CONSOLE_ALLOC handling to kernelbase.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/console.c | 6 +++--- dlls/kernel32/kernel_main.c | 13 ------------- dlls/kernel32/kernel_private.h | 1 - dlls/kernelbase/console.c | 10 ++++++++++ include/wine/condrv.h | 3 +++ 5 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c index afbf9a91da..5b5722847f 100644 --- a/dlls/kernel32/console.c +++ b/dlls/kernel32/console.c @@ -1129,7 +1129,7 @@ BOOL CONSOLE_Init(RTL_USER_PROCESS_PARAMETERS *params) */ if (!params->hStdInput || params->hStdInput == INVALID_HANDLE_VALUE) params->hStdInput = 0; - else if (VerifyConsoleIoHandle(params->hStdInput)) + else if (!is_console_handle(params->hStdInput) && VerifyConsoleIoHandle(params->hStdInput)) { params->hStdInput = console_handle_map(params->hStdInput); save_console_mode(params->hStdInput); @@ -1137,12 +1137,12 @@ BOOL CONSOLE_Init(RTL_USER_PROCESS_PARAMETERS *params)
if (!params->hStdOutput || params->hStdOutput == INVALID_HANDLE_VALUE) params->hStdOutput = 0; - else if (VerifyConsoleIoHandle(params->hStdOutput)) + else if (!is_console_handle(params->hStdOutput) && VerifyConsoleIoHandle(params->hStdOutput)) params->hStdOutput = console_handle_map(params->hStdOutput);
if (!params->hStdError || params->hStdError == INVALID_HANDLE_VALUE) params->hStdError = 0; - else if (VerifyConsoleIoHandle(params->hStdError)) + else if (!is_console_handle(params->hStdError) && VerifyConsoleIoHandle(params->hStdError)) params->hStdError = console_handle_map(params->hStdError);
return TRUE; diff --git a/dlls/kernel32/kernel_main.c b/dlls/kernel32/kernel_main.c index e856cc3af4..450a10e93b 100644 --- a/dlls/kernel32/kernel_main.c +++ b/dlls/kernel32/kernel_main.c @@ -147,19 +147,6 @@ static BOOL process_attach( HMODULE module ) LoadLibraryA( "krnl386.exe16" ); }
- if (params->ConsoleHandle == KERNEL32_CONSOLE_ALLOC) - { - HMODULE mod = GetModuleHandleA(0); - params->ConsoleHandle = NULL; - if (RtlImageNtHeader(mod)->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI) - AllocConsole(); - } - /* else TODO for DETACHED_PROCESS: - * 1/ inherit console + handles - * 2/ create std handles, if handles are not inherited - * TBD when not using wineserver handles for console handles - */ - return TRUE; }
diff --git a/dlls/kernel32/kernel_private.h b/dlls/kernel32/kernel_private.h index 2a0e524748..ce893d7bc4 100644 --- a/dlls/kernel32/kernel_private.h +++ b/dlls/kernel32/kernel_private.h @@ -51,7 +51,6 @@ static inline BOOL set_ntstatus( NTSTATUS status ) }
/* Some Wine specific values for Console inheritance (params->ConsoleHandle) */ -#define KERNEL32_CONSOLE_ALLOC ((HANDLE)1) #define KERNEL32_CONSOLE_SHELL ((HANDLE)2)
extern HMODULE kernel32_handle DECLSPEC_HIDDEN; diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 42dc971227..7589f305b5 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -1729,5 +1729,15 @@ HRESULT WINAPI ResizePseudoConsole( HPCON handle, COORD size )
void init_console( void ) { + RTL_USER_PROCESS_PARAMETERS *params = RtlGetCurrentPeb()->ProcessParameters; + + if (params->ConsoleHandle == CONSOLE_HANDLE_ALLOC) + { + HMODULE mod = GetModuleHandleW( NULL ); + params->ConsoleHandle = NULL; + if (RtlImageNtHeader( mod )->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI) + AllocConsole(); + } + RtlAddVectoredExceptionHandler( FALSE, handle_ctrl_c ); } diff --git a/include/wine/condrv.h b/include/wine/condrv.h index eb6439684a..14177a5e19 100644 --- a/include/wine/condrv.h +++ b/include/wine/condrv.h @@ -226,4 +226,7 @@ enum condrv_renderer_event_type CONSOLE_RENDERER_EXIT_EVENT, };
+/* Wine specific values for console inheritance (params->ConsoleHandle) */ +#define CONSOLE_HANDLE_ALLOC ((HANDLE)1) + #endif /* _INC_CONDRV */