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);
}
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);