summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkrakjoe <joe.watkins@live.co.uk>2014-04-21 21:43:19 +0100
committerkrakjoe <joe.watkins@live.co.uk>2014-04-21 21:43:19 +0100
commite9668d4ce8512838d92b05aa47da02c85a37c486 (patch)
tree8606a87e638c3cf81dec31fb148e124ed30c8dd3
parentbb0f0347dd99d42be923d5f61bc13e86df7cb8d4 (diff)
downloadphp-git-e9668d4ce8512838d92b05aa47da02c85a37c486.tar.gz
buffer input to repeat commands
-rw-r--r--phpdbg.c8
-rw-r--r--phpdbg.h4
-rw-r--r--phpdbg_cmd.c21
-rw-r--r--phpdbg_prompt.c15
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: