struct stat stat_buf;
char *binary_name = NULL;
- xbt_assert(e
- && e->used,
- "Backtrace not setup yet, cannot set it up for display");
+ xbt_assert(e, "Backtrace not setup yet, cannot set it up for display");
e->bt_strings = NULL;
if (!xbt_binary_name) /* no binary name, nothing to do */
return;
- backtrace_syms = backtrace_symbols(e->bt, e->used);
- /* ignore first one, which is this xbt_backtrace_current() */
- e->used--;
- memmove(backtrace_syms, backtrace_syms + 1, sizeof(char *) * e->used);
+ if (e->used <= 1)
+ return;
+ /* ignore first one, which is xbt_backtrace_current() */
+ e->used--;
+ memmove(e->bt, e->bt + 1, (sizeof *e->bt) * e->used);
- /* Some arches only have stubs of backtrace, no implementation (hppa comes to mind) */
- if (!e->used)
- return;
+ backtrace_syms = backtrace_symbols(e->bt, e->used);
/* build the commandline */
if (stat(xbt_binary_name, &stat_buf)) {
int i;
char **backtrace_syms;
- xbt_assert(e
- && e->used,
- "Backtrace not setup yet, cannot set it up for display");
+ xbt_assert(e, "Backtrace not setup yet, cannot set it up for display");
+
+ if (!e->used)
+ return;
backtrace_syms = backtrace_symbols(e->bt, e->used);
e->bt_strings = NULL;
/* parse the output and build a new backtrace */
e->bt_strings = xbt_new(char *, e->used);
-
for (i = 0; i < e->used; i++)
e->bt_strings[i] = backtrace_syms[i];