]> granicus.if.org Git - php/commitdiff
implement init file and command line options
authorkrakjoe <joe.watkins@live.co.uk>
Thu, 14 Nov 2013 16:58:50 +0000 (16:58 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Thu, 14 Nov 2013 16:58:50 +0000 (16:58 +0000)
phpdbg.c
phpdbg_prompt.c
phpdbg_prompt.h

index 207e4ca0edfff070222a92a808a65601e38ff51f..7eabfe93d7c78938d90281aa0460bf73a01a76b2 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -297,6 +297,7 @@ const opt_struct OPTIONS[] = { /* {{{ */
        {'s', 0, "step"},
        {'b', 0, "boring colours"},
        {'i', 1, "init"},
+       {'I', 0, "ignore-init"},
        {'-', 0, NULL}
 }; /* }}} */
 
@@ -331,6 +332,7 @@ int main(int argc, char **argv) /* {{{ */
        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;
@@ -361,6 +363,7 @@ phpdbg_main:
     exec_len = 0;
     init_file = NULL;
     init_file_len = 0;
+    init_file_default = 1;
     flags = PHPDBG_DEFAULT_FLAGS;
     php_optarg = NULL;
     php_optind = 1;
@@ -417,6 +420,10 @@ phpdbg_main:
                 }
             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) {
@@ -487,7 +494,7 @@ phpdbg_main:
                } 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);
index dd0c3a26f14a1645f7a7bf4ed3f996e263b66593..e8d6156a8520fa306f6a9208442c8cbf93e8e760 100644 (file)
@@ -71,11 +71,54 @@ static const phpdbg_command_t phpdbg_prompt_commands[] = {
 
 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);
+        }
     }
 } /* }}} */
 
index 2ffe672c8028bc2e3bf883cbb6104a655d0a1268..1f6afc207d7f1f488cffbb921a9a0d657b585734 100644 (file)
@@ -61,7 +61,7 @@ int phpdbg_do_cmd(const phpdbg_command_t *command, char *cmd_line, size_t cmd_le
 #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);