another patch from upstream
authorkrakjoe <joe.watkins@live.co.uk>
Sun, 2 Feb 2014 14:58:39 +0000 (14:58 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Sun, 2 Feb 2014 14:58:39 +0000 (14:58 +0000)
sapi/phpdbg/phpdbg_cmd.c

index c7008512436ae2cb8bff01ed66dba3719e40cc23..1d78c533216afc754a41e9013be197814329c8e2 100644 (file)
@@ -479,7 +479,7 @@ disconnect:
 
 #ifndef HAVE_LIBREADLINE
                        if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
-                               if (!phpdbg_write(phpdbg_get_prompt(TSRMLS_C))) {
+                               if (!phpdbg_write("%s", phpdbg_get_prompt(TSRMLS_C))) {
                                        goto disconnect;
                                }
                        }
@@ -595,6 +595,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;
 
@@ -657,15 +659,20 @@ PHPDBG_API int phpdbg_do_cmd(const phpdbg_command_t *command, phpdbg_input_t *in
                                        }
                                }
 
+                               initial_last_param = PHPDBG_G(lparam);
+                               initial_last_cmd = (phpdbg_command_t *)PHPDBG_G(lcmd);
+                               PHPDBG_G(lparam) = param;
+                               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;
                        }