From 8871d2d12eb6b516d6685a83ca8530af6d1557f8 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 3 Jul 2017 21:58:51 +0200 Subject: [PATCH] Fixed bug #74849 Process is started as interactive shell in PhpStorm --- sapi/cli/php_cli.c | 3 +-- win32/console.c | 12 ++++++++++++ win32/console.h | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index 07e8a8c803..d1fa6a6d00 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -675,8 +675,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ char *arg_free=NULL, **arg_excp=&arg_free; char *script_file=NULL, *translated_path = NULL; #if defined(PHP_WIN32) && !defined(PHP_CLI_WIN32_NO_CONSOLE) && (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) - DWORD pl[1]; - int interactive = (GetConsoleProcessList(pl, 1) == 1) && !IsDebuggerPresent(); + int interactive = php_win32_console_is_own(); #else int interactive=0; #endif diff --git a/win32/console.c b/win32/console.c index 78836493e4..07e6afa940 100644 --- a/win32/console.c +++ b/win32/console.c @@ -91,3 +91,15 @@ PHP_WINUTIL_API BOOL php_win32_console_fileno_set_vt100(zend_long fileno, BOOL e } return result; } + +PHP_WINUTIL_API BOOL php_win32_console_is_own(void) +{ + CONSOLE_SCREEN_BUFFER_INFO csbi; + + if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi) && !IsDebuggerPresent()) { + return !csbi.dwCursorPosition.X && !csbi.dwCursorPosition.Y; + } + + return FALSE; +} + diff --git a/win32/console.h b/win32/console.h index 0a2213c7ef..ab62a6ba35 100644 --- a/win32/console.h +++ b/win32/console.h @@ -56,4 +56,9 @@ associated to a file descriptor */ PHP_WINUTIL_API BOOL php_win32_console_fileno_set_vt100(zend_long fileno, BOOL enable); +/* Check, whether the program has its own console. If a process was launched + through a GUI, it will have it's own console. For more info see + http://support.microsoft.com/kb/99115 */ +PHP_WINUTIL_API BOOL php_win32_console_is_own(void); + #endif -- 2.50.1