Commit: 5af371409cb361dc0ce452212b0b4020a7d36f46 Author: krakjoe <joe.watk...@live.co.uk> Tue, 19 Nov 2013 20:27:23 +0000 Parents: 1a2618b229f03247bb2006a272598d9a7ec66994 Branches: PHP-5.6
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=5af371409cb361dc0ce452212b0b4020a7d36f46 Log: debugging new input stuff Changed paths: M phpdbg_cmd.c M phpdbg_cmd.h M phpdbg_prompt.c Diff: diff --git a/phpdbg_cmd.c b/phpdbg_cmd.c index 227e659..8eb38d7 100644 --- a/phpdbg_cmd.c +++ b/phpdbg_cmd.c @@ -137,7 +137,8 @@ static inline phpdbg_input_t** phpdbg_read_argv(char *buffer, int *argc TSRMLS_D phpdbg_input_t *arg = emalloc(sizeof(phpdbg_input_t));\ if (arg) {\ b[l]=0;\ - arg->string = estrndup(b, l);\ + arg->length = l;\ + arg->string = estrndup(b, arg->length);\ arg->argv=NULL;\ arg->argc=0;\ argv = (phpdbg_input_t**) erealloc(argv, sizeof(phpdbg_input_t*) * ((*argc)+1));\ @@ -319,6 +320,52 @@ void phpdbg_destroy_input(phpdbg_input_t **input TSRMLS_DC) /*{{{ */ } } /* }}} */ +int phpdbg_do_cmd_ex(const phpdbg_command_t *command, phpdbg_input_t *input TSRMLS_DC) /* {{{ */ +{ + int rc = FAILURE; + + if (input->argc > 0) { + while (command && command->name && command->handler) { + if (((command->name_len == input->argv[0]->length) && + (memcmp(command->name, input->argv[0]->string, command->name_len) == SUCCESS)) || + (command->alias && + (input->argv[0]->length == 1) && + (command->alias == *input->argv[0]->string))) { + if (command->subs && input->argc > 1) { + phpdbg_input_t sub; + + sub.argc = input->argc-1; + sub.argv = &input->argv[1]; + + return phpdbg_do_cmd_ex(command->subs, &sub TSRMLS_CC); + } + + phpdbg_debug( + "found command %s for %s with %d arguments", + command->name, input->argv[0]->string, input->argc-1); + { + int arg; + for (arg=1; arg<input->argc; arg++) { + phpdbg_debug( + "\t#%d: [%s=%d]", + arg, + input->argv[arg]->string, + input->argv[arg]->length); + } + } + break; + } + command++; + } + } else { + /* this should NEVER happen */ + phpdbg_error( + "No function executed !!"); + } + + return rc; +} /* }}} */ + int phpdbg_do_cmd(const phpdbg_command_t *command, char *cmd_line, size_t cmd_len TSRMLS_DC) /* {{{ */ { int rc = FAILURE; diff --git a/phpdbg_cmd.h b/phpdbg_cmd.h index a8865ce..47ada44 100644 --- a/phpdbg_cmd.h +++ b/phpdbg_cmd.h @@ -88,6 +88,7 @@ struct _phpdbg_command_t { * Command Executor */ phpdbg_input_t* phpdbg_read_input(TSRMLS_D); +int phpdbg_do_cmd_ex(const phpdbg_command_t*, phpdbg_input_t *input TSRMLS_DC); int phpdbg_do_cmd(const phpdbg_command_t*, char*, size_t TSRMLS_DC); phpdbg_param_type phpdbg_parse_param(const char*, size_t, phpdbg_param_t* TSRMLS_DC); void phpdbg_clear_param(phpdbg_param_t* TSRMLS_DC); diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index d5b4bda..bb7dc00 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -973,6 +973,8 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ if (input && input->length > 0L) { do { + phpdbg_do_cmd_ex(phpdbg_prompt_commands, input TSRMLS_CC); + switch (ret = phpdbg_do_cmd(phpdbg_prompt_commands, input->string, input->length TSRMLS_CC)) { case FAILURE: if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php