Use compiler-agnostic defines to silence warning
[lttng-tools.git] / src / bin / lttng / loglevel.cpp
index 6b9881a025bcd8004982b059fd4fd99e4f96657a..1ffd13c982b0b0ed1d750e211624c2e227765bfe 100644 (file)
@@ -6,9 +6,10 @@
  */
 
 #include "loglevel.hpp"
+
+#include <ctype.h>
 #include <string.h>
 #include <strings.h>
-#include <ctype.h>
 
 namespace {
 struct loglevel_name_value {
@@ -17,8 +18,7 @@ struct loglevel_name_value {
 };
 } /* namespace */
 
-static
-const struct loglevel_name_value loglevel_values[] = {
+static const struct loglevel_name_value loglevel_values[] = {
        { .name = "EMERG", .value = LTTNG_LOGLEVEL_EMERG },
        { .name = "TRACE_EMERG", .value = LTTNG_LOGLEVEL_EMERG },
        { .name = "ALERT", .value = LTTNG_LOGLEVEL_ALERT },
@@ -58,8 +58,7 @@ const struct loglevel_name_value loglevel_values[] = {
        { .name = "TRACE_DEBUG", .value = LTTNG_LOGLEVEL_DEBUG },
 };
 
-static
-const struct loglevel_name_value loglevel_log4j_values[] = {
+static const struct loglevel_name_value loglevel_log4j_values[] = {
        { .name = "OFF", .value = LTTNG_LOGLEVEL_LOG4J_OFF },
        { .name = "LOG4J_OFF", .value = LTTNG_LOGLEVEL_LOG4J_OFF },
        { .name = "FATAL", .value = LTTNG_LOGLEVEL_LOG4J_FATAL },
@@ -78,8 +77,26 @@ const struct loglevel_name_value loglevel_log4j_values[] = {
        { .name = "LOG4J_ALL", .value = LTTNG_LOGLEVEL_LOG4J_ALL },
 };
 
-static
-const struct loglevel_name_value loglevel_jul_values[] = {
+static const struct loglevel_name_value loglevel_log4j2_values[] = {
+       { .name = "OFF", .value = LTTNG_LOGLEVEL_LOG4J2_OFF },
+       { .name = "LOG4J2_OFF", .value = LTTNG_LOGLEVEL_LOG4J2_OFF },
+       { .name = "FATAL", .value = LTTNG_LOGLEVEL_LOG4J2_FATAL },
+       { .name = "LOG4J2_FATAL", .value = LTTNG_LOGLEVEL_LOG4J2_FATAL },
+       { .name = "ERROR", .value = LTTNG_LOGLEVEL_LOG4J2_ERROR },
+       { .name = "LOG4J2_ERROR", .value = LTTNG_LOGLEVEL_LOG4J2_ERROR },
+       { .name = "WARN", .value = LTTNG_LOGLEVEL_LOG4J2_WARN },
+       { .name = "LOG4J2_WARN", .value = LTTNG_LOGLEVEL_LOG4J2_WARN },
+       { .name = "INFO", .value = LTTNG_LOGLEVEL_LOG4J2_INFO },
+       { .name = "LOG4J2_INFO", .value = LTTNG_LOGLEVEL_LOG4J2_INFO },
+       { .name = "DEBUG", .value = LTTNG_LOGLEVEL_LOG4J2_DEBUG },
+       { .name = "LOG4J2_DEBUG", .value = LTTNG_LOGLEVEL_LOG4J2_DEBUG },
+       { .name = "TRACE", .value = LTTNG_LOGLEVEL_LOG4J2_TRACE },
+       { .name = "LOG4J2_TRACE", .value = LTTNG_LOGLEVEL_LOG4J2_TRACE },
+       { .name = "ALL", .value = LTTNG_LOGLEVEL_LOG4J2_ALL },
+       { .name = "LOG4J2_ALL", .value = LTTNG_LOGLEVEL_LOG4J2_ALL },
+};
+
+static const struct loglevel_name_value loglevel_jul_values[] = {
        { .name = "OFF", .value = LTTNG_LOGLEVEL_JUL_OFF },
        { .name = "JUL_OFF", .value = LTTNG_LOGLEVEL_JUL_OFF },
        { .name = "SEVERE", .value = LTTNG_LOGLEVEL_JUL_SEVERE },
@@ -100,8 +117,7 @@ const struct loglevel_name_value loglevel_jul_values[] = {
        { .name = "JUL_ALL", .value = LTTNG_LOGLEVEL_JUL_ALL },
 };
 
-static
-const struct loglevel_name_value loglevel_python_values[] = {
+static const struct loglevel_name_value loglevel_python_values[] = {
        { .name = "CRITICAL", .value = LTTNG_LOGLEVEL_PYTHON_CRITICAL },
        { .name = "PYTHON_CRITICAL", .value = LTTNG_LOGLEVEL_PYTHON_CRITICAL },
        { .name = "ERROR", .value = LTTNG_LOGLEVEL_PYTHON_ERROR },
@@ -116,15 +132,14 @@ const struct loglevel_name_value loglevel_python_values[] = {
        { .name = "PYTHON_NOTSET", .value = LTTNG_LOGLEVEL_PYTHON_NOTSET },
 };
 
-static
-bool string_equal_insensitive(const char *a, const char *b)
+static bool string_equal_insensitive(const char *a, const char *b)
 {
        return strcasecmp(a, b) == 0;
 }
 
-static
-int lookup_value_from_name(const struct loglevel_name_value values[],
-               size_t values_count, const char *name)
+static int lookup_value_from_name(const struct loglevel_name_value values[],
+                                 size_t values_count,
+                                 const char *name)
 {
        size_t i;
        int ret = -1;
@@ -146,15 +161,19 @@ end:
 }
 
 static bool loglevel_parse_range_string_common(const char *str,
-               const struct loglevel_name_value *nvs,
-               size_t nvs_count,
-               int *min,
-               int *max)
+                                              const struct loglevel_name_value *nvs,
+                                              size_t nvs_count,
+                                              int default_most_severe,
+                                              int *least_severe,
+                                              int *most_severe)
 {
        bool ret;
        int i;
        const struct loglevel_name_value *nv;
 
+       /*
+        * Look for a valid loglevel name value at the beginning of 'str'.
+        */
        for (i = 0; i < nvs_count; i++) {
                nv = &nvs[i];
 
@@ -163,31 +182,52 @@ static bool loglevel_parse_range_string_common(const char *str,
                }
        }
 
+       /*
+        * Found no valid loglevel name value at the beginning of 'str'.
+        */
        if (i == nvs_count) {
                goto error;
        }
 
-       *min = nv->value;
+       /*
+        * Record the least_severe value and skip over the loglevel name found
+        * previously.
+        */
+       *least_severe = nv->value;
        str += strlen(nv->name);
 
+       /*
+        * If we are at the end of 'str', only one loglevel name was specified,
+        * it is also the most_severe.
+        */
        if (*str == '\0') {
-               *max = nv->value;
+               *most_severe = nv->value;
                ret = true;
                goto end;
        }
 
+       /*
+        * Invalid 'str', no loglevel name separator.
+        */
        if (strncmp(str, "..", strlen("..")) != 0) {
                goto error;
        }
 
        str += strlen("..");
 
+       /*
+        * If we are at the end of 'str' after the separator, set the default
+        * most_severe value for the domain as the most_severe.
+        */
        if (*str == '\0') {
-               *max = LTTNG_LOGLEVEL_EMERG;
+               *most_severe = default_most_severe;
                ret = true;
                goto end;
        }
 
+       /*
+        * Look for a valid loglevel name value after the separator in 'str'.
+        */
        for (i = 0; i < nvs_count; i++) {
                nv = &nvs[i];
 
@@ -196,11 +236,17 @@ static bool loglevel_parse_range_string_common(const char *str,
                }
        }
 
+       /*
+        * Found no valid loglevel name value after the separator.
+        */
        if (i == nvs_count) {
                goto error;
        }
 
-       *max = nv->value;
+       /*
+        * Record the most_severe value for the loglevel found in 'str'.
+        */
+       *most_severe = nv->value;
 
        ret = true;
        goto end;
@@ -214,8 +260,7 @@ end:
 
 int loglevel_name_to_value(const char *name, enum lttng_loglevel *loglevel)
 {
-       int ret = lookup_value_from_name(loglevel_values,
-                       ARRAY_SIZE(loglevel_values), name);
+       int ret = lookup_value_from_name(loglevel_values, ARRAY_SIZE(loglevel_values), name);
 
        if (ret >= 0) {
                *loglevel = (typeof(*loglevel)) ret;
@@ -226,25 +271,27 @@ int loglevel_name_to_value(const char *name, enum lttng_loglevel *loglevel)
 }
 
 bool loglevel_parse_range_string(const char *str,
-               enum lttng_loglevel *min,
-               enum lttng_loglevel *max)
+                                enum lttng_loglevel *least_severe,
+                                enum lttng_loglevel *most_severe)
 {
-       int min_int, max_int;
-       bool ret = loglevel_parse_range_string_common(str, loglevel_values,
-                       ARRAY_SIZE(loglevel_values), &min_int, &max_int);
+       int least_severe_int, most_severe_int;
+       const bool ret = loglevel_parse_range_string_common(str,
+                                                           loglevel_values,
+                                                           ARRAY_SIZE(loglevel_values),
+                                                           LTTNG_LOGLEVEL_EMERG,
+                                                           &least_severe_int,
+                                                           &most_severe_int);
 
-       *min = (lttng_loglevel) min_int;
-       *max = (lttng_loglevel) max_int;
+       *least_severe = (lttng_loglevel) least_severe_int;
+       *most_severe = (lttng_loglevel) most_severe_int;
 
        return ret;
 }
 
-int loglevel_log4j_name_to_value(
-               const char *name, enum lttng_loglevel_log4j *loglevel)
+int loglevel_log4j_name_to_value(const char *name, enum lttng_loglevel_log4j *loglevel)
 {
-       int ret = lookup_value_from_name(loglevel_log4j_values,
-                       ARRAY_SIZE(loglevel_log4j_values),
-                       name);
+       int ret = lookup_value_from_name(
+               loglevel_log4j_values, ARRAY_SIZE(loglevel_log4j_values), name);
 
        if (ret >= 0) {
                *loglevel = (typeof(*loglevel)) ret;
@@ -255,26 +302,58 @@ int loglevel_log4j_name_to_value(
 }
 
 bool loglevel_log4j_parse_range_string(const char *str,
-               enum lttng_loglevel_log4j *min,
-               enum lttng_loglevel_log4j *max)
+                                      enum lttng_loglevel_log4j *least_severe,
+                                      enum lttng_loglevel_log4j *most_severe)
+{
+       int least_severe_int, most_severe_int;
+       const bool ret = loglevel_parse_range_string_common(str,
+                                                           loglevel_log4j_values,
+                                                           ARRAY_SIZE(loglevel_log4j_values),
+                                                           LTTNG_LOGLEVEL_LOG4J_FATAL,
+                                                           &least_severe_int,
+                                                           &most_severe_int);
+
+       *least_severe = (lttng_loglevel_log4j) least_severe_int;
+       *most_severe = (lttng_loglevel_log4j) most_severe_int;
+
+       return ret;
+}
+
+int loglevel_log4j2_name_to_value(const char *name, enum lttng_loglevel_log4j2 *loglevel)
+{
+       int ret = lookup_value_from_name(
+               loglevel_log4j2_values, ARRAY_SIZE(loglevel_log4j2_values), name);
+
+       if (ret >= 0) {
+               *loglevel = (typeof(*loglevel)) ret;
+               ret = 0;
+       }
+
+       return ret;
+}
+
+bool loglevel_log4j2_parse_range_string(const char *str,
+                                       enum lttng_loglevel_log4j2 *least_severe,
+                                       enum lttng_loglevel_log4j2 *most_severe)
 {
-       int min_int, max_int;
+       int least_severe_int, most_severe_int;
        bool ret = loglevel_parse_range_string_common(str,
-                       loglevel_log4j_values,
-                       ARRAY_SIZE(loglevel_log4j_values), &min_int, &max_int);
+                                                     loglevel_log4j2_values,
+                                                     ARRAY_SIZE(loglevel_log4j2_values),
+                                                     LTTNG_LOGLEVEL_LOG4J2_FATAL,
+                                                     &least_severe_int,
+                                                     &most_severe_int);
 
-       *min = (lttng_loglevel_log4j) min_int;
-       *max = (lttng_loglevel_log4j) max_int;
+       *least_severe = (lttng_loglevel_log4j2) least_severe_int;
+       *most_severe = (lttng_loglevel_log4j2) most_severe_int;
 
        return ret;
 }
 
-int loglevel_jul_name_to_value(
-               const char *name, enum lttng_loglevel_jul *loglevel)
+int loglevel_jul_name_to_value(const char *name, enum lttng_loglevel_jul *loglevel)
 {
-       int ret = lookup_value_from_name(loglevel_jul_values,
-                       ARRAY_SIZE(loglevel_jul_values),
-                       name);
+       int ret =
+               lookup_value_from_name(loglevel_jul_values, ARRAY_SIZE(loglevel_jul_values), name);
 
        if (ret >= 0) {
                *loglevel = (typeof(*loglevel)) ret;
@@ -285,25 +364,27 @@ int loglevel_jul_name_to_value(
 }
 
 bool loglevel_jul_parse_range_string(const char *str,
-               enum lttng_loglevel_jul *min,
-               enum lttng_loglevel_jul *max)
+                                    enum lttng_loglevel_jul *least_severe,
+                                    enum lttng_loglevel_jul *most_severe)
 {
-       int min_int, max_int;
-       bool ret = loglevel_parse_range_string_common(str, loglevel_jul_values,
-                       ARRAY_SIZE(loglevel_jul_values), &min_int, &max_int);
+       int least_severe_int, most_severe_int;
+       const bool ret = loglevel_parse_range_string_common(str,
+                                                           loglevel_jul_values,
+                                                           ARRAY_SIZE(loglevel_jul_values),
+                                                           LTTNG_LOGLEVEL_JUL_SEVERE,
+                                                           &least_severe_int,
+                                                           &most_severe_int);
 
-       *min = (lttng_loglevel_jul) min_int;
-       *max = (lttng_loglevel_jul) max_int;
+       *least_severe = (lttng_loglevel_jul) least_severe_int;
+       *most_severe = (lttng_loglevel_jul) most_severe_int;
 
        return ret;
 }
 
-int loglevel_python_name_to_value(
-               const char *name, enum lttng_loglevel_python *loglevel)
+int loglevel_python_name_to_value(const char *name, enum lttng_loglevel_python *loglevel)
 {
-       int ret = lookup_value_from_name(loglevel_python_values,
-                       ARRAY_SIZE(loglevel_python_values),
-                       name);
+       int ret = lookup_value_from_name(
+               loglevel_python_values, ARRAY_SIZE(loglevel_python_values), name);
 
        if (ret >= 0) {
                *loglevel = (typeof(*loglevel)) ret;
@@ -314,26 +395,28 @@ int loglevel_python_name_to_value(
 }
 
 bool loglevel_python_parse_range_string(const char *str,
-               enum lttng_loglevel_python *min,
-               enum lttng_loglevel_python *max)
+                                       enum lttng_loglevel_python *least_severe,
+                                       enum lttng_loglevel_python *most_severe)
 {
-       int min_int, max_int;
-       bool ret = loglevel_parse_range_string_common(str,
-                       loglevel_python_values,
-                       ARRAY_SIZE(loglevel_python_values), &min_int, &max_int);
+       int least_severe_int, most_severe_int;
+       const bool ret = loglevel_parse_range_string_common(str,
+                                                           loglevel_python_values,
+                                                           ARRAY_SIZE(loglevel_python_values),
+                                                           LTTNG_LOGLEVEL_PYTHON_CRITICAL,
+                                                           &least_severe_int,
+                                                           &most_severe_int);
 
-       *min = (lttng_loglevel_python) min_int;
-       *max = (lttng_loglevel_python) max_int;
+       *least_severe = (lttng_loglevel_python) least_severe_int;
+       *most_severe = (lttng_loglevel_python) most_severe_int;
 
        return ret;
 }
 
-static
-const char *lookup_name_from_value(const struct loglevel_name_value values[],
-               size_t values_count, int loglevel)
+static const char *
+lookup_name_from_value(const struct loglevel_name_value values[], size_t values_count, int loglevel)
 {
        size_t i;
-       const char *name = NULL;
+       const char *name = nullptr;
 
        for (i = 0; i < values_count; i++) {
                if (values[i].value == loglevel) {
@@ -349,24 +432,29 @@ end:
 
 const char *loglevel_value_to_name(int loglevel)
 {
-       return lookup_name_from_value(
-                       loglevel_values, ARRAY_SIZE(loglevel_values), loglevel);
+       return lookup_name_from_value(loglevel_values, ARRAY_SIZE(loglevel_values), loglevel);
 }
 
 const char *loglevel_log4j_value_to_name(int loglevel)
 {
-       return lookup_name_from_value(loglevel_log4j_values,
-                       ARRAY_SIZE(loglevel_log4j_values), loglevel);
+       return lookup_name_from_value(
+               loglevel_log4j_values, ARRAY_SIZE(loglevel_log4j_values), loglevel);
+}
+
+const char *loglevel_log4j2_value_to_name(int loglevel)
+{
+       return lookup_name_from_value(
+               loglevel_log4j2_values, ARRAY_SIZE(loglevel_log4j2_values), loglevel);
 }
 
 const char *loglevel_jul_value_to_name(int loglevel)
 {
-       return lookup_name_from_value(loglevel_jul_values,
-                       ARRAY_SIZE(loglevel_jul_values), loglevel);
+       return lookup_name_from_value(
+               loglevel_jul_values, ARRAY_SIZE(loglevel_jul_values), loglevel);
 }
 
 const char *loglevel_python_value_to_name(int loglevel)
 {
-       return lookup_name_from_value(loglevel_python_values,
-                       ARRAY_SIZE(loglevel_python_values), loglevel);
+       return lookup_name_from_value(
+               loglevel_python_values, ARRAY_SIZE(loglevel_python_values), loglevel);
 }
This page took 0.030307 seconds and 4 git commands to generate.