Compile, works fine ... push it
On Tuesday 18 of September 2012 15:12:34 Michal Toman wrote:
> ---
> lib/core-backtrace.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 45 insertions(+), 2 deletions(-)
>
> diff --git a/lib/core-backtrace.c b/lib/core-backtrace.c
> index a97c3da..d026758 100644
> --- a/lib/core-backtrace.c
> +++ b/lib/core-backtrace.c
> @@ -183,9 +183,52 @@ btp_load_core_backtrace(const char *text)
> frame->address = (uint64_t)off;
>
> /* SYMBOL */
> - char *symbol = read_string(&cur);
> + /* may contain spaces! RHBZ #857475 */
> + /* if ( character is found, we do not stop on white space, but on )
> */ + /* parentheses may be nested, we need to consider the depth */
> + btp_skip_whitespace(cur);
> + char lastchar = ' ';
> + char *end;
> + int depth = 0;
> + for (end = cur; *end && *end != '\n' && (*end != lastchar || depth
> > 1); ++end) + {
> + switch (*end)
> + {
> + case '(':
> + lastchar = ')';
> + ++depth;
> + break;
> +
> + case ')':
> + --depth;
> + break;
> +
> + default:
> + break;
> + }
> + }
> +
> + switch (*end)
> + {
> + /* jump one character to also show ) */
> + case ')':
> + ++end;
> + break;
> +
> + case ' ':
> + break;
> +
> + /* error - we are on \n or \0 */
> + default:
> + btp_thread_free(thread);
> + return NULL;
> + }
> +
> /* btparser uses "??" to denote unknown function name */
> - frame->function_name = (symbol ? symbol : btp_strdup("??"));
> + *end = '\0';
> + frame->function_name = btp_strdup(strcmp(cur, "-") ? cur : "??");
> + *end = ' ';
> + cur = end;
>
> /* FILENAME */
> aux->filename = read_string(&cur);