mirror of
https://github.com/php/php-src.git
synced 2025-08-19 17:04:47 +02:00
- Fix conflict
This commit is contained in:
commit
22f0ff6c12
4 changed files with 114 additions and 13 deletions
95
phpdbg.c
95
phpdbg.c
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue