Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
still fighting against this code
[simgrid.git] / src / xbt / xbt_log_layout_format.cpp
index 3243b77..e07eca4 100644 (file)
@@ -1,34 +1,28 @@
 /* layout_simple - a dumb log layout                                        */
 
-/* Copyright (c) 2007-2019. The SimGrid Team.                               */
+/* Copyright (c) 2007-2020. The SimGrid Team.                               */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include "simgrid/engine.h" /* simgrid_get_clock */
 #include "simgrid/host.h"
-#include "simgrid/msg.h" /* MSG_get_clock */
 #include "src/xbt/log_private.hpp"
 #include "xbt/sysdep.h"
-#include <stdio.h>
-
-#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
+#include <algorithm>
+#include <cstdio>
 
 extern const char *xbt_log_priority_names[8];
 
-#define ERRMSG                                                          \
-  "Unknown %%%c sequence in layout format (%s).\n"                      \
-  "Known sequences:\n"                                                  \
-  "  what:        %%m: user message  %%c: log category  %%p: log priority\n" \
-  "  where:\n"                                                          \
-  "    source:    %%F: file          %%L: line          %%M: function  %%l: location (%%F:%%L)\n" \
-  "    runtime:   %%h: hostname      %%t: thread        %%P: process   %%i: PID\n" \
-  "  when:        %%d: date          %%r: app. age\n"                   \
-  "  other:       %%%%: %%             %%n: new line      %%e: plain space\n"
+static constexpr const char* ERRMSG =
+    "Unknown %%%c sequence in layout format (%s).\n"
+    "Known sequences:\n"
+    "  what:        %%m: user message  %%c: log category  %%p: log priority\n"
+    "  where:\n"
+    "    source:    %%F: file          %%L: line          %%M: function  %%l: location (%%F:%%L)\n"
+    "    runtime:   %%h: hostname      %%t: thread        %%P: process   %%i: PID\n"
+    "  when:        %%d: date          %%r: app. age\n"
+    "  other:       %%%%: %%             %%n: new line      %%e: plain space\n";
 
 #define check_overflow(len)                                             \
   if ((rem_size -= (len)) > 0) {                                        \
@@ -46,41 +40,43 @@ extern const char *xbt_log_priority_names[8];
     }                                                                   \
   } else (void)0
 
-#define show_it(data, letter)                                           \
-  if (1) {                                                              \
-    int len;                                                            \
-    int wd;                                                             \
-    if (length == -1) {                                                 \
-      wd = 0;                                                           \
-    } else {                                                            \
-      wd = length;                                                      \
-      length = -1;                                                      \
-    }                                                                   \
-    if (precision == -1) {                                              \
-      len = snprintf(p, rem_size, "%*" letter, wd, data);               \
-    } else {                                                            \
-      len = snprintf(p, rem_size, "%*.*" letter, wd, precision, data);  \
-      precision = -1;                                                   \
-    }                                                                   \
-    check_overflow(len);                                                \
-  } else (void)0
+#define show_it(data, letter)                                                                                          \
+  if (1) {                                                                                                             \
+    int len;                                                                                                           \
+    int wd;                                                                                                            \
+    if (length == -1) {                                                                                                \
+      wd = 0;                                                                                                          \
+    } else {                                                                                                           \
+      wd     = length;                                                                                                 \
+      length = -1;                                                                                                     \
+    }                                                                                                                  \
+    if (precision == -1) {                                                                                             \
+      len = snprintf(p, rem_size, "%*" letter, wd, (data));                                                            \
+    } else {                                                                                                           \
+      len       = snprintf(p, rem_size, "%*.*" letter, wd, precision, (data));                                         \
+      precision = -1;                                                                                                  \
+    }                                                                                                                  \
+    check_overflow(len);                                                                                               \
+  } else                                                                                                               \
+  (void)0
 
 #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")
+#define show_int(data) show_it((data), "d")
+#define show_double(data) show_it((data), "f")
 
-static int xbt_log_layout_format_doit(xbt_log_layout_t l, xbt_log_event_t ev, const char *msg_fmt)
+static int xbt_log_layout_format_doit(const s_xbt_log_layout_t* l, xbt_log_event_t ev, const char* msg_fmt)
 {
   char *p = ev->buffer;
   int rem_size = ev->buffer_size;
   int precision = -1;
   int length = -1;
 
-  for (char* q = static_cast<char*>(l->data) ; *q != '\0' ; q++) {
+  char* q = static_cast<char*>(l->data);
+  while (*q != '\0') {
     if (*q == '%') {
       q++;
       do {
@@ -139,7 +135,7 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l, xbt_log_event_t ev, co
             int sz;
             set_sz_from_precision();
             int len = snprintf(p, sz, "%s:%d", ev->fileName, ev->lineNum);
-            check_overflow(MIN(sz, len));
+            check_overflow(std::min(sz, len));
             break;
           }
           case 'L': /* line number; LOG4J compliant */
@@ -149,10 +145,10 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l, xbt_log_event_t ev, co
             show_string(ev->functionName);
             break;
           case 'd': /* date; LOG4J compliant */
-            show_double(MSG_get_clock());
+            show_double(simgrid_get_clock());
             break;
           case 'r': /* application age; LOG4J compliant */
-            show_double(MSG_get_clock());
+            show_double(simgrid_get_clock());
             break;
           case 'm': { /* user-provided message; LOG4J compliant */
             int sz;
@@ -161,7 +157,7 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l, xbt_log_event_t ev, co
             va_copy(ap, ev->ap);
             int len = vsnprintf(p, sz, msg_fmt, ap);
             va_end(ap);
-            check_overflow(MIN(sz, len));
+            check_overflow(std::min(sz, len));
             break;
           }
           default:
@@ -174,23 +170,24 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l, xbt_log_event_t ev, co
       *p = *q;
       check_overflow(1);
     }
+    q++;
   }
   *p = '\0';
 
   return 1;
 }
 
-static void xbt_log_layout_format_free(xbt_log_layout_t lay)
+static void xbt_log_layout_format_free(const s_xbt_log_layout_t* lay)
 {
-  free(lay->data);
+  xbt_free(lay->data);
 }
 
-xbt_log_layout_t xbt_log_layout_format_new(char *arg)
+xbt_log_layout_t xbt_log_layout_format_new(const char* arg)
 {
   xbt_log_layout_t res = xbt_new0(s_xbt_log_layout_t, 1);
   res->do_layout       = &xbt_log_layout_format_doit;
   res->free_           = &xbt_log_layout_format_free;
-  res->data = xbt_strdup((char *) arg);
+  res->data            = xbt_strdup(arg);
 
   return res;
 }