From 341468055759c4cd0247b460536d25a44a11551b Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sun, 10 Nov 2013 18:24:13 -0200 Subject: [PATCH] - Improved phpdbg_set_breakpoint_file function --- phpdbg_bp.c | 20 +++++--------------- phpdbg_bp.h | 2 +- phpdbg_prompt.c | 12 +++++++++++- 3 files changed, 17 insertions(+), 17 deletions(-) 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); -- 2.50.1