diff options
author | Anatol Belski <ab@php.net> | 2017-08-03 11:23:50 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2017-08-03 11:23:50 +0200 |
commit | 93c2c56a1bc6a6184ce92dd0d9f3702c8ed00444 (patch) | |
tree | 8ccf73e17ca82109584af03f5ce76227dfc5e965 /sapi/cli/php_cli.c | |
parent | 39f0e810c94cdc73aca508f16cf94800fd216f84 (diff) | |
download | php-git-93c2c56a1bc6a6184ce92dd0d9f3702c8ed00444.tar.gz |
Rework automatic interactive cli activation
There are still systems delivering buggy console info. If a file was
passed, obviously no interaction is meant.
Diffstat (limited to 'sapi/cli/php_cli.c')
-rw-r--r-- | sapi/cli/php_cli.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index d1fa6a6d00..52055c98c9 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -674,11 +674,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ char *exec_direct=NULL, *exec_run=NULL, *exec_begin=NULL, *exec_end=NULL; 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) - int interactive = php_win32_console_is_own(); -#else int interactive=0; -#endif int lineno = 0; const char *param_error=NULL; int hide_argv = 0; @@ -918,6 +914,20 @@ static int do_cli(int argc, char **argv) /* {{{ */ goto err; } +#if defined(PHP_WIN32) && !defined(PHP_CLI_WIN32_NO_CONSOLE) && (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) + if (!interactive) { + /* The -a option was not passed. If there is no file, it could + still make sense to run interactively. The presense of a file + is essential to mitigate buggy console info. */ + interactive = php_win32_console_is_own() && + !(script_file || + argc > php_optind && behavior!=PHP_MODE_CLI_DIRECT && + behavior!=PHP_MODE_PROCESS_STDIN && + strcmp(argv[php_optind-1],"--") + ); + } +#endif + if (interactive) { #if (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) printf("Interactive shell\n\n"); |