1
0
mirror of https://github.com/php/php-src.git synced 2026-03-31 12:42:29 +02:00

embed code in .phpdbginit

This commit is contained in:
krakjoe
2013-11-15 14:53:40 +00:00
parent 8b41387343
commit b63fd6d261
3 changed files with 116 additions and 6 deletions

View File

@@ -13,3 +13,6 @@
# b m my::method
# e my.php
# c
php:
end;

View File

@@ -73,10 +73,71 @@ static const phpdbg_command_t phpdbg_prompt_commands[] = {
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
int phpdbg_confirm(char *message TSRMLS_DC)
{
char cmd[PHPDBG_MAX_CMD];
zend_bool confirmed = 0,
result = 0;
phpdbg_writeln(message);
do {
phpdbg_error("Confirm (y or n) ?");
if ((fgets(cmd, PHPDBG_MAX_CMD, stdin) != NULL)) {
switch (cmd[0]) {
case 'y':
case 'Y': {
result = 1;
confirmed = 1;
} break;
case 'n':
case 'N': {
confirmed = 1;
} break;
}
}
} while (!confirmed);
return result;
}
void phpdbg_sigint_handler(int signum)
{
TSRMLS_FETCH();
phpdbg_writeln(EMPTY);
signal(signum, SIG_IGN);
if (EG(in_execution)) {
if (phpdbg_confirm(
"Do you really want to quit while executing ?" TSRMLS_CC)) {
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
zend_bailout();
} else {
signal(
SIGINT, phpdbg_sigint_handler);
phpdbg_interactive(TSRMLS_C);
}
} else {
phpdbg_notice("Interrupted ...");
PHPDBG_G(flags) = PHPDBG_IS_QUITTING;
zend_bailout();
}
}
void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC) /* {{{ */
{
zend_bool init_default = 0;
signal(SIGINT, phpdbg_sigint_handler);
if (!init_file && use_default) {
struct stat sb;
@@ -90,9 +151,13 @@ void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TS
if (init_file) {
FILE *fp = fopen(init_file, "r");
if (fp) {
int line = 1;
char cmd[PHPDBG_MAX_CMD];
size_t cmd_len = 0L;
int line = 1;
char *code = NULL;
size_t code_len = 0L;
zend_bool in_code = 0;
while (fgets(cmd, PHPDBG_MAX_CMD, fp) != NULL) {
cmd_len = strlen(cmd)-1;
@@ -103,15 +168,56 @@ void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TS
cmd[cmd_len] = '\0';
if (*cmd && cmd_len > 0L && cmd[0] != '#') {
switch (phpdbg_do_cmd(phpdbg_prompt_commands, cmd, cmd_len TSRMLS_CC)) {
case FAILURE:
phpdbg_error(
"Unrecognized command in %s:%d: %s!", init_file, line, cmd);
break;
if (cmd_len == 2) {
if (memcmp(cmd, "<:", sizeof("<:")-1) == SUCCESS) {
in_code = 1;
goto next_line;
} else {
if (memcmp(cmd, ":>", sizeof(":>")-1) == SUCCESS) {
in_code = 0;
code[code_len] = '\0';
{
zend_eval_stringl(
code, code_len, NULL, "phpdbginit code" TSRMLS_CC);
}
free(code);
code = NULL;
goto next_line;
}
}
}
if (in_code) {
if (code == NULL) {
code = malloc(cmd_len);
} else code = realloc(code, code_len + cmd_len);
if (code) {
memcpy(
&code[code_len], cmd, cmd_len);
code_len += cmd_len;
}
goto next_line;
}
switch (cmd[0]) {
default: switch (phpdbg_do_cmd(phpdbg_prompt_commands, cmd, cmd_len TSRMLS_CC)) {
case FAILURE:
phpdbg_error(
"Unrecognized command in %s:%d: %s!", init_file, line, cmd);
break;
}
}
}
next_line:
line++;
}
if (code) {
free(code);
}
fclose(fp);
} else {
phpdbg_error(

View File

@@ -63,6 +63,7 @@ int phpdbg_do_cmd(const phpdbg_command_t *command, char *cmd_line, size_t cmd_le
void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC);
void phpdbg_welcome(zend_bool cleaning TSRMLS_DC);
int phpdbg_confirm(char *message TSRMLS_DC);
int phpdbg_interactive(TSRMLS_D);
void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags TSRMLS_DC);
void phpdbg_clean(zend_bool full TSRMLS_DC);