]> granicus.if.org Git - php/commitdiff
- Improved phpdbg_set_breakpoint_file function
authorFelipe Pena <felipensp@gmail.com>
Sun, 10 Nov 2013 20:24:13 +0000 (18:24 -0200)
committerFelipe Pena <felipensp@gmail.com>
Sun, 10 Nov 2013 20:24:13 +0000 (18:24 -0200)
phpdbg_bp.c
phpdbg_bp.h
phpdbg_prompt.c

index 7114ff0530c937dabb29c2c9c862d654b75f3882..5229a0b7b55398ad644799fd3f477c134d7551b5 100644 (file)
@@ -39,36 +39,26 @@ static void phpdbg_llist_breaksym_dtor(void *data) /* {{{ */
        efree((char*)bp->symbol);
 } /* }}} */
 
-void phpdbg_set_breakpoint_file(const char *expr, const char *line_pos TSRMLS_DC) /* {{{ */
+void phpdbg_set_breakpoint_file(const char *path, long line_num TSRMLS_DC) /* {{{ */
 {
-       char resolved_name[MAXPATHLEN];
-       long line_num = strtol(line_pos+1, NULL, 0);
        phpdbg_breakfile_t new_break;
        zend_llist *break_files_ptr;
-       size_t name_len;
-       char *path = estrndup(expr, line_pos - expr);
+       size_t path_len = strlen(path);
 
-       if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) {
-               efree(path);
-               return;
-       }
-       efree(path);
-
-       name_len = strlen(resolved_name);
-       new_break.filename = estrndup(resolved_name, name_len + 1);
+       new_break.filename = estrndup(path, path_len + 1);
        new_break.line = line_num;
 
        PHPDBG_G(has_file_bp) = 1;
 
        if (zend_hash_find(&PHPDBG_G(bp_files),
-               new_break.filename, name_len, (void**)&break_files_ptr) == FAILURE) {
+               new_break.filename, path_len, (void**)&break_files_ptr) == FAILURE) {
                zend_llist break_files;
 
                zend_llist_init(&break_files, sizeof(phpdbg_breakfile_t),
                        phpdbg_llist_breakfile_dtor, 0);
 
                zend_hash_update(&PHPDBG_G(bp_files),
-                       new_break.filename, name_len, &break_files, sizeof(zend_llist),
+                       new_break.filename, path_len, &break_files, sizeof(zend_llist),
                        (void**)&break_files_ptr);
        }
 
index 38b9c6174c6773b777b4eb567af21be7ad807920..49035be550c6484c5fbd3542443b383ea87e0dcf 100644 (file)
@@ -38,7 +38,7 @@ typedef struct _phpdbg_breaksymbol_t {
        int id;
 } phpdbg_breaksymbol_t;
 
-void phpdbg_set_breakpoint_file(const char*, const char* TSRMLS_DC);
+void phpdbg_set_breakpoint_file(const char*, long TSRMLS_DC);
 void phpdbg_set_breakpoint_symbol(const char*, const char* TSRMLS_DC);
 
 int phpdbg_find_breakpoint_file(zend_op_array* TSRMLS_DC);
index fc559dd2df5021b36d00fd3fa426ea84c47c126b..5e3b968b9f25a89a5a70558b66565df24a1696e3 100644 (file)
@@ -213,7 +213,17 @@ static PHPDBG_COMMAND(break) /* {{{ */
        const char *line_pos = zend_memrchr(expr, ':', expr_len);
 
        if (line_pos) {
-               phpdbg_set_breakpoint_file(expr, line_pos TSRMLS_CC);
+               char path[MAXPATHLEN], resolved_name[MAXPATHLEN];
+               long line_num = strtol(line_pos+1, NULL, 0);
+
+               memcpy(path, expr, line_pos - expr);
+               path[line_pos - expr] = 0;
+
+               if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) {
+                       return FAILURE;
+               }
+
+               phpdbg_set_breakpoint_file(resolved_name, line_num TSRMLS_CC);
        } else {
                const char *opline_num_pos = zend_memrchr(expr, '#', expr_len);