PHPDBG_API void phpdbg_set_breakpoint_method(const char* class_name, const char* func_name TSRMLS_DC) /* {{{ */
{
- HashTable class_breaks, *class_table;
+ HashTable class_breaks, *class_table;
- size_t class_len = strlen(class_name);
- size_t func_len = strlen(func_name);
+ size_t class_len = strlen(class_name);
+ size_t func_len = strlen(func_name);
+ char *lcname = zend_str_tolower_dup(func_name, func_len);
- if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_name,
+ if (zend_hash_find(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_name,
class_len, (void**)&class_table) != SUCCESS) {
- zend_hash_init(&class_breaks, 8, NULL, phpdbg_class_breaks_dtor, 0);
- zend_hash_update(
- &PHPDBG_G(bp)[PHPDBG_BREAK_METHOD],
- class_name, class_len,
- (void**)&class_breaks, sizeof(HashTable), (void**)&class_table);
- }
+ zend_hash_init(&class_breaks, 8, NULL, phpdbg_class_breaks_dtor, 0);
+ zend_hash_update(
+ &PHPDBG_G(bp)[PHPDBG_BREAK_METHOD],
+ class_name, class_len,
+ (void**)&class_breaks, sizeof(HashTable), (void**)&class_table);
+ }
- if (!zend_hash_exists(class_table, func_name, func_len)) {
- phpdbg_breakmethod_t new_break;
+ if (!zend_hash_exists(class_table, func_name, func_len)) {
+ phpdbg_breakmethod_t new_break;
- PHPDBG_G(flags) |= PHPDBG_HAS_METHOD_BP;
+ PHPDBG_G(flags) |= PHPDBG_HAS_METHOD_BP;
- new_break.class_name = estrndup(class_name, class_len);
- new_break.class_len = class_len;
- new_break.func_name = estrndup(func_name, func_len);
- new_break.func_len = func_len;
- new_break.id = PHPDBG_G(bp_count)++;
+ new_break.class_name = estrndup(class_name, class_len);
+ new_break.class_len = class_len;
+ new_break.func_name = estrndup(func_name, func_len);
+ new_break.func_len = func_len;
+ new_break.id = PHPDBG_G(bp_count)++;
- zend_hash_update(class_table, lcname, func_len,
- zend_hash_update(class_table, func_name, func_len,
++ zend_hash_update(class_table, lcname, func_len,
&new_break, sizeof(phpdbg_breakmethod_t), NULL);
- phpdbg_notice("Breakpoint #%d added at %s::%s",
- new_break.id, class_name, func_name);
- } else {
+ phpdbg_notice("Breakpoint #%d added at %s::%s",
+ new_break.id, class_name, func_name);
+ } else {
phpdbg_notice("Breakpoint exists at %s::%s", class_name, func_name);
- }
+ }
+
+ efree(lcname);
} /* }}} */
PHPDBG_API void phpdbg_set_breakpoint_opline(zend_ulong opline TSRMLS_DC) /* {{{ */