diff --git a/NEWS b/NEWS index 3cc5da3f42a..113cfa93441 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,10 @@ PHP NEWS - PDO_Firebird: . Fix bogus fallthrough path in firebird_handle_get_attribute(). (nielsdos) +- PHPDBG: + . Fixed bug GH-13199 (EOF emits redundant prompt in phpdbg local console mode + with libedit/readline). (Peter Kokot) + - Soap: . Fixed bug #55639 (Digest autentication dont work). (nielsdos) diff --git a/sapi/phpdbg/phpdbg_cmd.c b/sapi/phpdbg/phpdbg_cmd.c index f5701384d3a..6249e79417f 100644 --- a/sapi/phpdbg/phpdbg_cmd.c +++ b/sapi/phpdbg/phpdbg_cmd.c @@ -23,6 +23,10 @@ #include "phpdbg_prompt.h" #include "phpdbg_io.h" +#ifdef HAVE_UNISTD_H +# include +#endif + ZEND_EXTERN_MODULE_GLOBALS(phpdbg) static inline const char *phpdbg_command_name(const phpdbg_command_t *command, char *buffer) { @@ -746,17 +750,29 @@ PHPDBG_API char *phpdbg_read_input(const char *buffered) /* {{{ */ if ((PHPDBG_G(flags) & (PHPDBG_IS_STOPPING | PHPDBG_IS_RUNNING)) != PHPDBG_IS_STOPPING) { if (buffered == NULL) { #ifdef HAVE_PHPDBG_READLINE - char *cmd = readline(phpdbg_get_prompt()); - PHPDBG_G(last_was_newline) = 1; +# ifdef HAVE_UNISTD_H + /* EOF makes readline write prompt again in local console mode and + ignored if compiled without readline integration. */ + if (!isatty(PHPDBG_G(io)[PHPDBG_STDIN].fd)) { + char buf[PHPDBG_MAX_CMD]; + phpdbg_write("%s", phpdbg_get_prompt()); + phpdbg_consume_stdin_line(buf); + buffer = estrdup(buf); + } else +# endif + { + char *cmd = readline(phpdbg_get_prompt()); + PHPDBG_G(last_was_newline) = 1; - if (!cmd) { - PHPDBG_G(flags) |= PHPDBG_IS_QUITTING; - zend_bailout(); + if (!cmd) { + PHPDBG_G(flags) |= PHPDBG_IS_QUITTING; + zend_bailout(); + } + + add_history(cmd); + buffer = estrdup(cmd); + free(cmd); } - - add_history(cmd); - buffer = estrdup(cmd); - free(cmd); #else phpdbg_write("%s", phpdbg_get_prompt()); phpdbg_consume_stdin_line(buf);