Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Don't list the possible routings in DTD. We want to add more w/o changing the DTD
[simgrid.git] / src / xbt / log.cpp
index 0060b279a1bb8651b934450dc8df92d77147d9b7..5b16eff25b87f81bf3e9c6170da661d3763fd626 100644 (file)
@@ -1,6 +1,6 @@
 /* log - a generic logging facility in the spirit of log4j                  */
 
-/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2004-2020. The SimGrid Team. All rights reserved.          */
 
 /* 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. */
@@ -123,10 +123,8 @@ void xbt_log_init(int *argc, char **argv)
   }
 }
 
-static void log_cat_exit(xbt_log_category_t cat)
+static void log_cat_exit(const s_xbt_log_category_t* cat)
 {
-  xbt_log_category_t child;
-
   if (cat->appender) {
     if (cat->appender->free_)
       cat->appender->free_(cat->appender);
@@ -138,7 +136,7 @@ static void log_cat_exit(xbt_log_category_t cat)
     xbt_free(cat->layout);
   }
 
-  for (child = cat->firstChild; child != nullptr; child = child->nextSibling)
+  for (auto const* child = cat->firstChild; child != nullptr; child = child->nextSibling)
     log_cat_exit(child);
 }
 
@@ -163,8 +161,8 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...)
   xbt_assert(static_cast<size_t>(ev->priority) < sizeof(xbt_log_priority_names)/sizeof(xbt_log_priority_names[0]),
              "Priority %d is greater than the biggest allowed value", ev->priority);
 
-  while (1) {
-    xbt_log_appender_t appender = cat->appender;
+  while (true) {
+    const s_xbt_log_appender_t* appender = cat->appender;
 
     if (appender != nullptr) {
       xbt_assert(cat->layout, "No valid layout for the appender of category %s", cat->name);
@@ -177,13 +175,14 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...)
       va_start(ev->ap, fmt);
       done = cat->layout->do_layout(cat->layout, ev, fmt);
       va_end(ev->ap);
+      ev->buffer = nullptr; // Calm down, static analyzers, this pointer to local array won't leak out of the scope.
       if (done) {
         appender->do_append(appender, buff);
       } else {
         /* The static buffer was too small, use a dynamically expanded one */
         ev->buffer_size = XBT_LOG_DYNAMIC_BUFFER_SIZE;
         ev->buffer      = static_cast<char*>(xbt_malloc(ev->buffer_size));
-        while (1) {
+        while (true) {
           va_start(ev->ap, fmt);
           done = cat->layout->do_layout(cat->layout, ev, fmt);
           va_end(ev->ap);
@@ -340,7 +339,7 @@ void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent)
   cat->isThreshInherited = 1;
 }
 
-static void _set_inherited_thresholds(xbt_log_category_t cat)
+static void _set_inherited_thresholds(const s_xbt_log_category_t* cat)
 {
   xbt_log_category_t child = cat->firstChild;
 
@@ -438,18 +437,15 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string)
 
 static xbt_log_category_t _xbt_log_cat_searchsub(xbt_log_category_t cat, const char* name)
 {
-  xbt_log_category_t child;
-  xbt_log_category_t res;
-
   XBT_DEBUG("Search '%s' into '%s' (firstChild='%s'; nextSibling='%s')", name,
          cat->name, (cat->firstChild ? cat->firstChild->name : "none"),
          (cat->nextSibling ? cat->nextSibling->name : "none"));
   if (strcmp(cat->name, name) == 0)
     return cat;
 
-  for (child = cat->firstChild; child != nullptr; child = child->nextSibling) {
+  for (xbt_log_category_t child = cat->firstChild; child != nullptr; child = child->nextSibling) {
     XBT_DEBUG("Dig into %s", child->name);
-    res = _xbt_log_cat_searchsub(child, name);
+    xbt_log_category_t res = _xbt_log_cat_searchsub(child, name);
     if (res)
       return res;
   }
@@ -631,7 +627,7 @@ static void xbt_log_help_categories_rec(xbt_log_category_t category, const std::
     cats.push_back(cat);
 
   std::sort(begin(cats), end(cats),
-            [](xbt_log_category_t a, xbt_log_category_t b) { return strcmp(a->name, b->name) < 0; });
+            [](const s_xbt_log_category_t* a, const s_xbt_log_category_t* b) { return strcmp(a->name, b->name) < 0; });
 
   for (auto const& cat : cats) {
     XBT_HELP("%s%s: %s", this_prefix.c_str(), cat->name, cat->description);