andrey Thu, 21 Jan 2010 18:12:18 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=293815
Log: Add possibility to restrain the number of levels Changed paths: U php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c U php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h U php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c U php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c 2010-01-21 18:08:30 UTC (rev 293814) +++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c 2010-01-21 18:12:18 UTC (rev 293815) @@ -1113,11 +1113,17 @@ long line; HashTable *ht = Z_ARRVAL_PP(frame); zval **file, **tmp; + uint * level; + level = va_arg(args, uint *); str = va_arg(args, char**); len = va_arg(args, int*); num = va_arg(args, int*); + if (!(*level)--) { + return ZEND_HASH_APPLY_KEEP; + } + s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1); sprintf(s_tmp, "#%d ", (*num)++); TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); @@ -1283,11 +1289,17 @@ long line; HashTable *ht = Z_ARRVAL_PP(frame); zval **file, **tmp; + uint * level; + level = va_arg(args, uint *); str = va_arg(args, char**); len = va_arg(args, int*); num = va_arg(args, int*); + if (!(*level)--) { + return ZEND_HASH_APPLY_KEEP; + } + s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1); sprintf(s_tmp, "#%d ", (*num)++); TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); @@ -1323,24 +1335,30 @@ #endif -char * mysqlnd_get_backtrace(TSRMLS_D) +PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC) { zval *trace; char *res = estrdup(""), **str = &res, *s_tmp; int res_len = 0, *len = &res_len, num = 0; + if (max_levels == 0) { + max_levels = 99999; + } MAKE_STD_ZVAL(trace); zend_fetch_debug_backtrace(trace, 0, 0 TSRMLS_CC); - zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)mysqlnd_build_trace_string, 3, str, len, &num); + zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)mysqlnd_build_trace_string, 4, &max_levels, str, len, &num); zval_ptr_dtor(&trace); - s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1); - sprintf(s_tmp, "#%d {main}", num); - TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); - efree(s_tmp); + if (max_levels) { + s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1); + sprintf(s_tmp, "#%d {main}", num); + TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); + efree(s_tmp); + } res[res_len] = '\0'; + *length = res_len; return res; } Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h =================================================================== --- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h 2010-01-21 18:08:30 UTC (rev 293814) +++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h 2010-01-21 18:12:18 UTC (rev 293815) @@ -78,7 +78,7 @@ PHPAPI void * _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D); PHPAPI void _mysqlnd_free(void *ptr MYSQLND_MEM_D); -PHPAPI char * mysqlnd_get_backtrace(TSRMLS_D); +PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC); #if defined(__GNUC__) #define DBG_INF_EX(dbg_obj, msg) do { if (dbg_skip_trace == FALSE) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg)); } while (0) Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c 2010-01-21 18:08:30 UTC (rev 293814) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c 2010-01-21 18:12:18 UTC (rev 293815) @@ -1113,11 +1113,17 @@ long line; HashTable *ht = Z_ARRVAL_PP(frame); zval **file, **tmp; + uint * level; + level = va_arg(args, uint *); str = va_arg(args, char**); len = va_arg(args, int*); num = va_arg(args, int*); + if (!(*level)--) { + return ZEND_HASH_APPLY_KEEP; + } + s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1); sprintf(s_tmp, "#%d ", (*num)++); TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); @@ -1283,11 +1289,17 @@ long line; HashTable *ht = Z_ARRVAL_PP(frame); zval **file, **tmp; + uint * level; + level = va_arg(args, uint *); str = va_arg(args, char**); len = va_arg(args, int*); num = va_arg(args, int*); + if (!(*level)--) { + return ZEND_HASH_APPLY_KEEP; + } + s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1); sprintf(s_tmp, "#%d ", (*num)++); TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); @@ -1323,24 +1335,30 @@ #endif -char * mysqlnd_get_backtrace(TSRMLS_D) +PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC) { zval *trace; char *res = estrdup(""), **str = &res, *s_tmp; int res_len = 0, *len = &res_len, num = 0; + if (max_levels == 0) { + max_levels = 99999; + } MAKE_STD_ZVAL(trace); zend_fetch_debug_backtrace(trace, 0, 0 TSRMLS_CC); - zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)mysqlnd_build_trace_string, 3, str, len, &num); + zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)mysqlnd_build_trace_string, 4, &max_levels, str, len, &num); zval_ptr_dtor(&trace); - s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1); - sprintf(s_tmp, "#%d {main}", num); - TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); - efree(s_tmp); + if (max_levels) { + s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1); + sprintf(s_tmp, "#%d {main}", num); + TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); + efree(s_tmp); + } res[res_len] = '\0'; + *length = res_len; return res; } Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h 2010-01-21 18:08:30 UTC (rev 293814) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h 2010-01-21 18:12:18 UTC (rev 293815) @@ -78,7 +78,7 @@ PHPAPI void * _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D); PHPAPI void _mysqlnd_free(void *ptr MYSQLND_MEM_D); -PHPAPI char * mysqlnd_get_backtrace(TSRMLS_D); +PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC); #if defined(__GNUC__) #define DBG_INF_EX(dbg_obj, msg) do { if (dbg_skip_trace == FALSE) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg)); } while (0)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php