{'s', 0, "step"},
{'b', 0, "boring colours"},
{'i', 1, "init"},
+ {'I', 0, "ignore-init"},
{'-', 0, NULL}
}; /* }}} */
size_t exec_len;
char *init_file;
size_t init_file_len;
+ zend_bool init_file_default;
zend_ulong flags;
char *php_optarg;
int php_optind;
exec_len = 0;
init_file = NULL;
init_file_len = 0;
+ init_file_default = 1;
flags = PHPDBG_DEFAULT_FLAGS;
php_optarg = NULL;
php_optind = 1;
}
break;
+ case 'I': { /* ignore .phpdbginit */
+ init_file_default = 0;
+ } break;
+
case 'i': /* set init file */
init_file_len = strlen(php_optarg);
if (init_file_len) {
} zend_end_try();
/* initialize from file */
- phpdbg_init(init_file, init_file_len TSRMLS_CC);
+ phpdbg_init(init_file, init_file_len, init_file_default TSRMLS_CC);
/* print blurb */
phpdbg_welcome(cleaning TSRMLS_CC);
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-void phpdbg_init(char *init_file, size_t init_file_len TSRMLS_DC) /* {{{ */
+void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC) /* {{{ */
{
+ zend_bool init_default = 0;
+
+ if (!init_file && use_default) {
+ struct stat sb;
+
+ if (VCWD_STAT(".phpdbginit", &sb) != -1) {
+ init_file = ".phpdbginit";
+ init_file_len = strlen(".phpdbginit");
+ init_default = 1;
+ }
+ }
+
if (init_file) {
+ FILE *fp = fopen(init_file, "r");
+ if (fp) {
+ char cmd[PHPDBG_MAX_CMD];
+ size_t cmd_len = 0L;
+ int line = 1;
+
+ while (fgets(cmd, PHPDBG_MAX_CMD, fp) != NULL) {
+ cmd_len = strlen(cmd)-1;
+
+ while (*cmd && isspace(cmd[cmd_len-1]))
+ cmd_len--;
+
+ 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;
+ }
+ }
+ line++;
+ }
+ fclose(fp);
+ } else {
+ phpdbg_error(
+ "Failed to open %s for initialization", init_file);
+ }
- free(init_file);
+ if (!init_default) {
+ free(init_file);
+ }
}
} /* }}} */
#define PHPDBG_COMMAND(name) \
int phpdbg_do_##name(const char *expr, size_t expr_len TSRMLS_DC)
-void phpdbg_init(char *init_file, size_t init_file_len TSRMLS_DC);
+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_interactive(TSRMLS_D);
void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC);