- Fix conflict

This commit is contained in:
Felipe Pena 2013-11-10 15:51:20 -02:00
commit 22f0ff6c12
4 changed files with 114 additions and 13 deletions

View file

@ -29,6 +29,7 @@ static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */
pg->ops = NULL;
pg->stepping = 0;
pg->vmret = 0;
pg->quitting = 0;
} /* }}} */
static PHP_MINIT_FUNCTION(phpdbg) /* {{{ */
@ -48,16 +49,16 @@ static void php_phpdbg_destroy_break(void *brake) /* {{{ */
static PHP_RINIT_FUNCTION(phpdbg) /* {{{ */
{
zend_hash_init(&PHPDBG_G(break_files), 8, NULL, php_phpdbg_destroy_break, 0);
zend_hash_init(&PHPDBG_G(break_symbols), 8, NULL, php_phpdbg_destroy_break, 0);
zend_hash_init(&PHPDBG_G(bp_files), 8, NULL, php_phpdbg_destroy_break, 0);
zend_hash_init(&PHPDBG_G(bp_symbols), 8, NULL, php_phpdbg_destroy_break, 0);
return SUCCESS;
} /* }}} */
static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */
{
zend_hash_destroy(&PHPDBG_G(break_files));
zend_hash_destroy(&PHPDBG_G(break_symbols));
zend_hash_destroy(&PHPDBG_G(bp_files));
zend_hash_destroy(&PHPDBG_G(bp_symbols));
if (PHPDBG_G(exec)) {
efree(PHPDBG_G(exec));
@ -125,9 +126,36 @@ static sapi_module_struct phpdbg_sapi_module = {
};
/* }}} */
const opt_struct OPTIONS[] = { /* }}} */
{'c', 1, "ini path override"},
{'d', 1, "define ini entry on command line"},
{'-', 0, NULL}
}; /* }}} */
/* overwriteable ini defaults must be set in phpdbg_ini_defaults() */
#define INI_DEFAULT(name,value)\
Z_SET_REFCOUNT(tmp, 0);\
Z_UNSET_ISREF(tmp); \
ZVAL_STRINGL(&tmp, zend_strndup(value, sizeof(value)-1), sizeof(value)-1, 0);\
zend_hash_update(configuration_hash, name, sizeof(name), &tmp, sizeof(zval), NULL);\
void phpdbg_ini_defaults(HashTable *configuration_hash) { /* {{{ */
zval tmp;
INI_DEFAULT("report_zend_debug", "0");
INI_DEFAULT("display_errors", "1");
} /* }}} */
int main(int argc, char **argv) /* {{{ */
{
sapi_module_struct *phpdbg = &phpdbg_sapi_module;
char *ini_file = NULL;
char *ini_entries = NULL;
int ini_entries_len = 0;
char *ini_path_override = NULL;
char *php_optarg = NULL;
int php_optind = 0;
int opt;
#ifdef ZTS
void ***tsrm_ls;
tsrm_startup(1, 1, 0, NULL);
@ -142,10 +170,59 @@ int main(int argc, char **argv) /* {{{ */
setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */
#endif
phpdbg->executable_location = argv[0];
while ((opt = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 1, 1)) != -1) {
switch (opt) {
case 'c':
if (ini_path_override) {
free(ini_path_override);
}
ini_path_override = strdup(php_optarg);
break;
case 'd': {
int len = strlen(php_optarg);
char *val;
if ((val = strchr(php_optarg, '='))) {
val++;
if (!isalnum(*val) && *val != '"' && *val != '\'' && *val != '\0') {
ini_entries = realloc(ini_entries, ini_entries_len + len + sizeof("\"\"\n\0"));
memcpy(ini_entries + ini_entries_len, php_optarg, (val - php_optarg));
ini_entries_len += (val - php_optarg);
memcpy(ini_entries + ini_entries_len, "\"", 1);
ini_entries_len++;
memcpy(ini_entries + ini_entries_len, val, len - (val - php_optarg));
ini_entries_len += len - (val - php_optarg);
memcpy(ini_entries + ini_entries_len, "\"\n\0", sizeof("\"\n\0"));
ini_entries_len += sizeof("\n\0\"") - 2;
} else {
ini_entries = realloc(ini_entries, ini_entries_len + len + sizeof("\n\0"));
memcpy(ini_entries + ini_entries_len, php_optarg, len);
memcpy(ini_entries + ini_entries_len + len, "\n\0", sizeof("\n\0"));
ini_entries_len += len + sizeof("\n\0") - 2;
}
} else {
ini_entries = realloc(ini_entries, ini_entries_len + len + sizeof("=1\n\0"));
memcpy(ini_entries + ini_entries_len, php_optarg, len);
memcpy(ini_entries + ini_entries_len + len, "=1\n\0", sizeof("=1\n\0"));
ini_entries_len += len + sizeof("=1\n\0") - 2;
}
} break;
}
}
phpdbg->ini_defaults = phpdbg_ini_defaults;
phpdbg->php_ini_path_override = ini_path_override;
phpdbg->phpinfo_as_text = 1;
phpdbg->php_ini_ignore_cwd = 1;
sapi_startup(phpdbg);
phpdbg->executable_location = argv[0];
phpdbg->phpinfo_as_text = 1;
phpdbg->php_ini_ignore_cwd = 0;
phpdbg->php_ini_ignore = 0;
phpdbg->ini_entries = ini_entries;
if (phpdbg->startup(phpdbg) == SUCCESS) {
zend_activate(TSRMLS_C);
@ -165,6 +242,14 @@ int main(int argc, char **argv) /* {{{ */
phpdbg_interactive(argc, argv TSRMLS_CC);
} zend_end_try();
if (ini_file) {
pefree(ini_file, 1);
}
if (ini_entries) {
free(ini_entries);
}
if (PG(modules_activated)) {
zend_try {
zend_deactivate_modules(TSRMLS_C);

View file

@ -18,6 +18,7 @@
#include "php.h"
#include "php_globals.h"
#include "php_variables.h"
#include "php_getopt.h"
#include "zend_modules.h"
#include "zend_ini_scanner.h"
#include "zend_globals.h"
@ -46,10 +47,11 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
size_t exec_len; /* size of exec */
zend_op_array *ops; /* op_array */
zval *retval; /* return value */
zend_bool stepping; /* stepping */
int stepping; /* stepping */
int vmret; /* return from last opcode handler execution */
zend_bool has_file_bp; /* file-based breakpoint has been set */
zend_bool has_sym_bp; /* symbol-based breakpoint has been set */
zend_bool quitting; /* quitting flag */
ZEND_END_MODULE_GLOBALS(phpdbg)
#include "phpdbg_prompt.h"

View file

@ -127,8 +127,10 @@ static PHPDBG_COMMAND(run) { /* {{{ */
zend_try {
zend_execute(EG(active_op_array) TSRMLS_CC);
} zend_catch {
printf("Caught excetion in VM\n");
return FAILURE;
if (!PHPDBG_G(quitting)) {
printf("Caught excetion in VM\n");
return FAILURE;
} else return SUCCESS;
} zend_end_try();
return SUCCESS;
@ -143,7 +145,10 @@ static PHPDBG_COMMAND(eval) { /* {{{ */
if (expr) {
if (zend_eval_stringl((char*)expr, expr_len-1, &retval, "eval()'d code" TSRMLS_CC) == SUCCESS) {
printf("Success\n");
printf("Success: ");
zend_print_zval_r(
&retval, 0 TSRMLS_CC);
printf("\n");
zval_dtor(&retval);
}
} else {
@ -276,6 +281,8 @@ static PHPDBG_COMMAND(break) /* {{{ */
static PHPDBG_COMMAND(quit) /* {{{ */
{
PHPDBG_G(quitting)=1;
zend_bailout();
return SUCCESS;
@ -399,7 +406,8 @@ int phpdbg_interactive(int argc, char **argv TSRMLS_DC) /* {{{ */
printf("phpdbg> ");
while (fgets(cmd, PHPDBG_MAX_CMD, stdin) != NULL) {
while (!PHPDBG_G(quitting) &&
fgets(cmd, PHPDBG_MAX_CMD, stdin) != NULL) {
size_t cmd_len = strlen(cmd) - 1;
while (cmd[cmd_len] == '\n') {
@ -409,7 +417,10 @@ int phpdbg_interactive(int argc, char **argv TSRMLS_DC) /* {{{ */
if (cmd_len) {
switch (phpdbg_do_cmd(phpdbg_prompt_commands, cmd, cmd_len TSRMLS_CC)) {
case FAILURE:
printf("error executing %s !\n", cmd);
if (!PHPDBG_G(quitting)) {
printf(
"Failed to execute %s !\n", cmd);
}
break;
case PHPDBG_NEXT:
@ -417,7 +428,9 @@ int phpdbg_interactive(int argc, char **argv TSRMLS_DC) /* {{{ */
}
}
printf("phpdbg> ");
if (!PHPDBG_G(quitting)) {
printf("phpdbg> ");
}
}
return SUCCESS;

View file

@ -5,4 +5,5 @@ function test() {
if (!isset($greeting)) {
echo test();
}
return true;
?>