]> granicus.if.org Git - php/commitdiff
Fixed that for example "run" is only set as last cmd after the whole execution
authorBob Weinand <bobwei9@hotmail.com>
Sat, 18 Jan 2014 18:18:28 +0000 (13:18 -0500)
committerBob Weinand <bobwei9@hotmail.com>
Sat, 18 Jan 2014 18:18:28 +0000 (13:18 -0500)
phpdbg_cmd.c

index 9f052d6f6f38529e2b04b3b675122f193e54efa6..21e07c88dfb03947bb75c32ab99381f9be94319b 100644 (file)
@@ -582,6 +582,8 @@ PHPDBG_API int phpdbg_do_cmd(const phpdbg_command_t *command, phpdbg_input_t *in
                                (command->alias == *input->argv[0]->string))) {
 
                                phpdbg_param_t param;
+                               phpdbg_command_t *initial_last_cmd;
+                               phpdbg_param_t initial_last_param;
 
                                param.type = EMPTY_PARAM;
 
@@ -644,15 +646,20 @@ PHPDBG_API int phpdbg_do_cmd(const phpdbg_command_t *command, phpdbg_input_t *in
                                        }
                                }
 
+                               PHPDBG_G(lparam) = param;
+                               initial_last_param = PHPDBG_G(lparam);
+                               initial_last_cmd = (phpdbg_command_t *)PHPDBG_G(lcmd);
+                               PHPDBG_G(lcmd) = (phpdbg_command_t *)command;
+
                                rc = command->handler(&param, input TSRMLS_CC);
 
                                /* only set last command when it is worth it! */
-                               if ((rc != FAILURE) &&
-                                       !(PHPDBG_G(flags) & PHPDBG_IS_INITIALIZING)) {
-                                       PHPDBG_G(lcmd) = (phpdbg_command_t*) command;
-                                       phpdbg_clear_param(
-                                               &PHPDBG_G(lparam) TSRMLS_CC);
-                                       PHPDBG_G(lparam) = param;
+                               if (rc != FAILURE && !(PHPDBG_G(flags) & PHPDBG_IS_INITIALIZING)) {
+                                       phpdbg_clear_param(&initial_last_param TSRMLS_CC);
+                               } else if (PHPDBG_G(lcmd) == command && !memcmp(&PHPDBG_G(lparam),& initial_last_param, sizeof(phpdbg_param_t))) {
+                                       PHPDBG_G(lparam) = initial_last_param;
+                                       PHPDBG_G(lcmd) = initial_last_cmd;
+                                       phpdbg_clear_param(&param TSRMLS_CC);
                                }
                                break;
                        }