From: Felipe Pena Date: Sun, 10 Nov 2013 20:24:13 +0000 (-0200) Subject: - Improved phpdbg_set_breakpoint_file function X-Git-Tag: php-5.6.0alpha1~110^2~515^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=341468055759c4cd0247b460536d25a44a11551b;p=php - Improved phpdbg_set_breakpoint_file function --- diff --git a/phpdbg_bp.c b/phpdbg_bp.c index 7114ff0530..5229a0b7b5 100644 --- a/phpdbg_bp.c +++ b/phpdbg_bp.c @@ -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); } diff --git a/phpdbg_bp.h b/phpdbg_bp.h index 38b9c6174c..49035be550 100644 --- a/phpdbg_bp.h +++ b/phpdbg_bp.h @@ -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); diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index fc559dd2df..5e3b968b9f 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -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);