Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
[simgrid.git] / src / xbt / xbt_log_layout_format.c
index 444d455..e19302c 100644 (file)
@@ -7,6 +7,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "portable.h"           /* execinfo when available */
+#include "xbt/ex_interface.h"
 #include "xbt/sysdep.h"
 #include "xbt/strbuff.h"
 #include "xbt/log_private.h"
@@ -63,7 +64,11 @@ static double format_begin_of_time = -1;
     check_overflow(len);                                                \
   } else (void)0
 
-#define show_string(data) show_it(data, "s")
+#define show_string(data)                                               \
+  if (1) {                                                              \
+    const char *show_string_data = (data);                              \
+    show_it(show_string_data ? show_string_data : "(null)", "s");       \
+  } else (void)0
 #define show_int(data)    show_it(data, "d")
 #define show_double(data) show_it(data, "f")
 
@@ -83,7 +88,8 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l,
     handle_modifier:
       switch (*q) {
       case '\0':
-        xbt_die("Layout format (%s) ending with %%\n", (char *)l->data);
+        fprintf(stderr, "Layout format (%s) ending with %%\n", (char *)l->data);
+        xbt_abort();
       case '%':
         *p = '%';
         check_overflow(1);
@@ -157,15 +163,16 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l,
           e.bt_strings = NULL;
           e.msg = NULL;
           e.remote = 0;
-          xbt_backtrace_current(&e);
+          xbt_ex_setup_backtrace(&e);
           if (*q == 'B') {
-            show_string(e.bt_strings[2] + 8);
+            show_string(e.bt_strings[1] + 8);
           } else {
             xbt_strbuff_t buff = xbt_strbuff_new();
             int i;
+            xbt_strbuff_append(buff, e.bt_strings[1] + 8);
             for (i = 2; i < e.used; i++) {
-              xbt_strbuff_append(buff, e.bt_strings[i] + 8);
               xbt_strbuff_append(buff, "\n");
+              xbt_strbuff_append(buff, e.bt_strings[i] + 8);
             }
             show_string(buff->data);
             xbt_strbuff_free(buff);
@@ -190,7 +197,8 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l,
         break;
       }
       default:
-        xbt_die(ERRMSG, *q, (char *)l->data);
+        fprintf(stderr, ERRMSG, *q, (char *)l->data);
+        xbt_abort();
       }
     } else {
       *p = *q;