mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Add possibility to restrain the number of levels
This commit is contained in:
parent
df15e2cde6
commit
2d7ca03976
2 changed files with 25 additions and 7 deletions
|
@ -1113,11 +1113,17 @@ static int mysqlnd_build_trace_string(zval **frame TSRMLS_DC, int num_args, va_l
|
|||
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 @@ static int mysqlnd_build_trace_string(zval **frame TSRMLS_DC, int num_args, va_l
|
|||
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 @@ static int mysqlnd_build_trace_string(zval **frame TSRMLS_DC, int num_args, va_l
|
|||
#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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue