]> granicus.if.org Git - php/commitdiff
-r option
authorkrakjoe <joe.watkins@live.co.uk>
Wed, 20 Nov 2013 16:19:37 +0000 (16:19 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Wed, 20 Nov 2013 16:19:37 +0000 (16:19 +0000)
phpdbg.c
phpdbg_prompt.c
phpdbg_prompt.h

index 1052619cd97a727f6179188c72c652bd55ef631b..5e9432e1e6552d6618c9b3acb739a6d1190ba589 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -392,6 +392,7 @@ const opt_struct OPTIONS[] = { /* {{{ */
        {'i', 1, "specify init"},
        {'I', 0, "ignore init"},
        {'O', 1, "opline log"},
+       {'r', 0, "run"},
        {'-', 0, NULL}
 }; /* }}} */
 
@@ -450,6 +451,7 @@ int main(int argc, char **argv) /* {{{ */
        char *php_optarg;
        int php_optind, opt, show_banner = 1;
        long cleaning = 0;
+       int run = 0;
 #ifdef ZTS
        void ***tsrm_ls;
 #endif
@@ -481,9 +483,13 @@ phpdbg_main:
        php_optarg = NULL;
        php_optind = 1;
        opt = 0;
-
+       run = 0;
+       
        while ((opt = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) {
                switch (opt) {
+                       case 'r':
+                               run++;
+                       break;
                        case 'n':
                                phpdbg->php_ini_ignore = 1;
                        break;
@@ -646,6 +652,15 @@ phpdbg_main:
                 goto phpdbg_out;
             }
         } zend_end_try();
+        
+        if (run) {
+               /* no need to try{}, run does it ... */
+               PHPDBG_COMMAND_HANDLER(run)(NULL, NULL TSRMLS_CC);
+               if (run > 1) {
+                       /* if -r is on the command line more than once just quit */
+                       goto phpdbg_out;
+               }
+        }
 
         /* phpdbg main() */
         do {
@@ -664,7 +679,6 @@ phpdbg_main:
                } while(!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING));
 
 phpdbg_out:
-
                if (ini_entries) {
                    free(ini_entries);
                }
index e0498e44407538e99d8cff09ca1e7d6672ef5943..3d5d42fcd5aa869a5b05dda182dcc33b94715a1c 100644 (file)
 #include "phpdbg_prompt.h"
 #include "phpdbg_cmd.h"
 
-/* {{{ forward declarations */
-static PHPDBG_COMMAND(exec);
-static PHPDBG_COMMAND(compile);
-static PHPDBG_COMMAND(step);
-static PHPDBG_COMMAND(next);
-static PHPDBG_COMMAND(run);
-static PHPDBG_COMMAND(eval);
-static PHPDBG_COMMAND(until);
-static PHPDBG_COMMAND(finish);
-static PHPDBG_COMMAND(leave);
-static PHPDBG_COMMAND(print);
-static PHPDBG_COMMAND(break);
-static PHPDBG_COMMAND(back);
-static PHPDBG_COMMAND(list);
-static PHPDBG_COMMAND(info);
-static PHPDBG_COMMAND(clean);
-static PHPDBG_COMMAND(clear);
-static PHPDBG_COMMAND(help);
-static PHPDBG_COMMAND(quiet);
-static PHPDBG_COMMAND(aliases);
-static PHPDBG_COMMAND(shell);
-static PHPDBG_COMMAND(oplog);
-static PHPDBG_COMMAND(register);
-static PHPDBG_COMMAND(quit); /* }}} */
-
 /* {{{ command declarations */
 static const phpdbg_command_t phpdbg_prompt_commands[] = {
        PHPDBG_COMMAND_D(exec,    "set execution context",                    'e', NULL, 1),
@@ -186,7 +161,7 @@ next_line:
        }
 } /* }}} */
 
-static PHPDBG_COMMAND(exec) /* {{{ */
+PHPDBG_COMMAND(exec) /* {{{ */
 {
        switch (param->type) {
                case STR_PARAM: {
@@ -256,7 +231,7 @@ int phpdbg_compile(TSRMLS_D) /* {{{ */
        return FAILURE;
 } /* }}} */
 
-static PHPDBG_COMMAND(compile) /* {{{ */
+PHPDBG_COMMAND(compile) /* {{{ */
 {
        if (!PHPDBG_G(exec)) {
                phpdbg_error("No execution context");
@@ -275,7 +250,7 @@ static PHPDBG_COMMAND(compile) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(step) /* {{{ */
+PHPDBG_COMMAND(step) /* {{{ */
 {
        switch (param->type) {
                case EMPTY_PARAM:
@@ -296,12 +271,12 @@ static PHPDBG_COMMAND(step) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(next) /* {{{ */
+PHPDBG_COMMAND(next) /* {{{ */
 {
        return PHPDBG_NEXT;
 } /* }}} */
 
-static PHPDBG_COMMAND(until) /* {{{ */
+PHPDBG_COMMAND(until) /* {{{ */
 {
        if (!EG(in_execution)) {
                phpdbg_error("Not executing");
@@ -329,7 +304,7 @@ static PHPDBG_COMMAND(until) /* {{{ */
        return PHPDBG_UNTIL;
 } /* }}} */
 
-static PHPDBG_COMMAND(finish) /* {{{ */
+PHPDBG_COMMAND(finish) /* {{{ */
 {
        if (!EG(in_execution)) {
                phpdbg_error("Not executing");
@@ -362,7 +337,7 @@ static PHPDBG_COMMAND(finish) /* {{{ */
        return PHPDBG_FINISH;
 } /* }}} */
 
-static PHPDBG_COMMAND(leave) /* {{{ */
+PHPDBG_COMMAND(leave) /* {{{ */
 {
        if (!EG(in_execution)) {
                phpdbg_error("Not executing");
@@ -445,7 +420,7 @@ static inline void phpdbg_handle_exception(TSRMLS_D) /* }}} */
        zval_dtor(&exception);
 } /* }}} */
 
-static PHPDBG_COMMAND(run) /* {{{ */
+PHPDBG_COMMAND(run) /* {{{ */
 {
        if (EG(in_execution)) {
                phpdbg_error("Cannot start another execution while one is in progress");
@@ -508,7 +483,7 @@ out:
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(eval) /* {{{ */
+PHPDBG_COMMAND(eval) /* {{{ */
 {
        switch (param->type) {
                case STR_PARAM: {
@@ -554,7 +529,7 @@ static PHPDBG_COMMAND(eval) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(back) /* {{{ */
+PHPDBG_COMMAND(back) /* {{{ */
 {
        if (!EG(in_execution)) {
                phpdbg_error("Not executing!");
@@ -592,7 +567,7 @@ static PHPDBG_COMMAND(back) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(print) /* {{{ */
+PHPDBG_COMMAND(print) /* {{{ */
 {
        switch (param->type) {
                case EMPTY_PARAM: {
@@ -644,12 +619,12 @@ static PHPDBG_COMMAND(print) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(info) /* {{{ */
+PHPDBG_COMMAND(info) /* {{{ */
 {
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(break) /* {{{ */
+PHPDBG_COMMAND(break) /* {{{ */
 {
        switch (param->type) {
                case ADDR_PARAM:
@@ -674,7 +649,7 @@ static PHPDBG_COMMAND(break) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(shell) /* {{{ */
+PHPDBG_COMMAND(shell) /* {{{ */
 {
        /* don't allow this to loop, ever ... */
        switch (param->type) {
@@ -710,7 +685,7 @@ static PHPDBG_COMMAND(shell) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(register) /* {{{ */
+PHPDBG_COMMAND(register) /* {{{ */
 {
        switch (param->type) {
                case STR_PARAM: {
@@ -742,7 +717,7 @@ static PHPDBG_COMMAND(register) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(quit) /* {{{ */
+PHPDBG_COMMAND(quit) /* {{{ */
 {
     /* don't allow this to loop, ever ... */
        if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
@@ -754,7 +729,7 @@ static PHPDBG_COMMAND(quit) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(clean) /* {{{ */
+PHPDBG_COMMAND(clean) /* {{{ */
 {
        if (EG(in_execution)) {
                phpdbg_error("Cannot clean environment while executing");
@@ -773,7 +748,7 @@ static PHPDBG_COMMAND(clean) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(clear) /* {{{ */
+PHPDBG_COMMAND(clear) /* {{{ */
 {
        phpdbg_notice("Clearing Breakpoints");
 
@@ -788,7 +763,7 @@ static PHPDBG_COMMAND(clear) /* {{{ */
     return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(aliases) /* {{{ */
+PHPDBG_COMMAND(aliases) /* {{{ */
 {
        const phpdbg_command_t *prompt_command = phpdbg_prompt_commands;
 
@@ -821,7 +796,7 @@ static PHPDBG_COMMAND(aliases) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(oplog) /* {{{ */
+PHPDBG_COMMAND(oplog) /* {{{ */
 {
        switch (param->type) {
                case EMPTY_PARAM:
@@ -860,7 +835,7 @@ static PHPDBG_COMMAND(oplog) /* {{{ */
     return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(help) /* {{{ */
+PHPDBG_COMMAND(help) /* {{{ */
 {
     switch (param->type) {
         case EMPTY_PARAM: {
@@ -899,6 +874,9 @@ static PHPDBG_COMMAND(help) /* {{{ */
                        phpdbg_writeln(" -i\t-imy.init\t\tSet .phpdbginit file");
                        phpdbg_writeln(" -I\tN/A\t\t\tIgnore default .phpdbginit");
                        phpdbg_writeln(" -O\t-Omy.oplog\t\tSets oplog output file");
+                       phpdbg_writeln(" -r\tN/A\t\t\tRun execution context");
+                       phpdbg_notice(
+                               "Note: passing -rr will cause phpdbg to quit after execution");
                        phpdbg_help_footer();
                } break;
 
@@ -908,7 +886,7 @@ static PHPDBG_COMMAND(help) /* {{{ */
        return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(quiet) /* {{{ */
+PHPDBG_COMMAND(quiet) /* {{{ */
 {
        switch (param->type) {
                case NUMERIC_PARAM: {
@@ -927,7 +905,7 @@ static PHPDBG_COMMAND(quiet) /* {{{ */
     return SUCCESS;
 } /* }}} */
 
-static PHPDBG_COMMAND(list) /* {{{ */
+PHPDBG_COMMAND(list) /* {{{ */
 {
        switch (param->type) {
         case NUMERIC_PARAM:
index 08997b5346f7d8bf624d9cc361da5bed79cd7186..c26dec2c34f672d53dbe9a894851c8867fef9ee6 100644 (file)
@@ -35,4 +35,29 @@ void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC);
 void phpdbg_execute_ex(zend_op_array *op_array TSRMLS_DC);
 #endif
 
+/* {{{ */
+PHPDBG_COMMAND(exec);
+PHPDBG_COMMAND(compile);
+PHPDBG_COMMAND(step);
+PHPDBG_COMMAND(next);
+PHPDBG_COMMAND(run);
+PHPDBG_COMMAND(eval);
+PHPDBG_COMMAND(until);
+PHPDBG_COMMAND(finish);
+PHPDBG_COMMAND(leave);
+PHPDBG_COMMAND(print);
+PHPDBG_COMMAND(break);
+PHPDBG_COMMAND(back);
+PHPDBG_COMMAND(list);
+PHPDBG_COMMAND(info);
+PHPDBG_COMMAND(clean);
+PHPDBG_COMMAND(clear);
+PHPDBG_COMMAND(help);
+PHPDBG_COMMAND(quiet);
+PHPDBG_COMMAND(aliases);
+PHPDBG_COMMAND(shell);
+PHPDBG_COMMAND(oplog);
+PHPDBG_COMMAND(register);
+PHPDBG_COMMAND(quit); /* }}} */
+
 #endif /* PHPDBG_PROMPT_H */