From e9668d4ce8512838d92b05aa47da02c85a37c486 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 21 Apr 2014 21:43:19 +0100 Subject: [PATCH] buffer input to repeat commands --- phpdbg.c | 8 ++++++-- phpdbg.h | 4 +--- phpdbg_cmd.c | 21 +++++++++++++++++++++ phpdbg_prompt.c | 15 ++------------- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/phpdbg.c b/phpdbg.c index d7eb5c8b38..5b235ee3a8 100644 --- a/phpdbg.c +++ b/phpdbg.c @@ -61,16 +61,15 @@ static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */ pg->exec = NULL; pg->exec_len = 0; + pg->buffer = NULL; pg->ops = NULL; pg->vmret = 0; pg->bp_count = 0; - pg->lcmd = NULL; pg->flags = PHPDBG_DEFAULT_FLAGS; pg->oplog = NULL; pg->io[PHPDBG_STDIN] = NULL; pg->io[PHPDBG_STDOUT] = NULL; pg->io[PHPDBG_STDERR] = NULL; - memset(&pg->lparam, 0, sizeof(phpdbg_param_t)); pg->frame.num = 0; } /* }}} */ @@ -184,6 +183,11 @@ static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */ zend_hash_destroy(&PHPDBG_G(watchpoints)); zend_llist_destroy(&PHPDBG_G(watchlist_mem)); + if (PHPDBG_G(buffer)) { + efree(PHPDBG_G(buffer)); + PHPDBG_G(buffer) = NULL; + } + if (PHPDBG_G(exec)) { efree(PHPDBG_G(exec)); PHPDBG_G(exec) = NULL; diff --git a/phpdbg.h b/phpdbg.h index d25e0be437..be009e40d0 100644 --- a/phpdbg.h +++ b/phpdbg.h @@ -199,9 +199,7 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg) char *prompt[2]; /* prompt */ const phpdbg_color_t *colors[PHPDBG_COLORS]; /* colors */ - - phpdbg_command_t *lcmd; /* last command */ - phpdbg_param_t lparam; /* last param */ + char *buffer; /* buffer */ zend_ulong flags; /* phpdbg flags */ ZEND_END_MODULE_GLOBALS(phpdbg) /* }}} */ diff --git a/phpdbg_cmd.c b/phpdbg_cmd.c index ce66ba39ec..d4ce8ebc55 100644 --- a/phpdbg_cmd.c +++ b/phpdbg_cmd.c @@ -858,6 +858,27 @@ readline: #endif } + if (buffer && isspace(*buffer)) { + char *trimmed = buffer; + while (isspace(*trimmed)) + trimmed++; + + trimmed = estrdup(trimmed); + efree(buffer); + buffer = trimmed; + } + + if (buffer && strlen(buffer)) { + if (PHPDBG_G(buffer)) { + efree(PHPDBG_G(buffer)); + } + PHPDBG_G(buffer) = estrdup(buffer); + } else { + if (PHPDBG_G(buffer)) { + buffer = estrdup(PHPDBG_G(buffer)); + } + } + return buffer; } /* }}} */ diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index d93b55374e..2e07c32174 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -1028,13 +1028,13 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ if (yyparse(&stack, scanner) <= 0) { switch (ret = phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: -// if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { + if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { if (phpdbg_call_register(&stack TSRMLS_CC) == FAILURE) { if (why) { phpdbg_error("%s", why); } } -// } + } if (why) { free(why); @@ -1066,17 +1066,6 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ phpdbg_destroy_input(&input TSRMLS_CC); } while ((input = phpdbg_read_input(NULL TSRMLS_CC))); - - if (!input) - goto last; - - } else { -last: - if (PHPDBG_G(lcmd)) { - ret = PHPDBG_G(lcmd)->handler( - &PHPDBG_G(lparam) TSRMLS_CC); - goto out; - } } out: -- 2.50.0