Cleanup: always use sysconf to get the page size
[lttng-tools.git] / src / bin / lttng / loglevel.c
index c18bf381c2e030f045a87e4dbef6dc896482f0d0..054510e85b3a493c0844bdc9baff90c624f86e9a 100644 (file)
@@ -9,7 +9,6 @@
 #include <string.h>
 #include <strings.h>
 #include <ctype.h>
-#include <assert.h>
 
 struct loglevel_name_value {
        const char *name;
@@ -144,7 +143,73 @@ end:
        return ret;
 }
 
-LTTNG_HIDDEN
+static bool loglevel_parse_range_string_common(const char *str,
+               const struct loglevel_name_value *nvs,
+               size_t nvs_count,
+               int *min,
+               int *max)
+{
+       bool ret;
+       int i;
+       const struct loglevel_name_value *nv;
+
+       for (i = 0; i < nvs_count; i++) {
+               nv = &nvs[i];
+
+               if (strncmp(str, nv->name, strlen(nv->name)) == 0) {
+                       break;
+               }
+       }
+
+       if (i == nvs_count) {
+               goto error;
+       }
+
+       *min = nv->value;
+       str += strlen(nv->name);
+
+       if (*str == '\0') {
+               *max = nv->value;
+               ret = true;
+               goto end;
+       }
+
+       if (strncmp(str, "..", strlen("..")) != 0) {
+               goto error;
+       }
+
+       str += strlen("..");
+
+       if (*str == '\0') {
+               *max = LTTNG_LOGLEVEL_EMERG;
+               ret = true;
+               goto end;
+       }
+
+       for (i = 0; i < nvs_count; i++) {
+               nv = &nvs[i];
+
+               if (strcmp(str, nv->name) == 0) {
+                       break;
+               }
+       }
+
+       if (i == nvs_count) {
+               goto error;
+       }
+
+       *max = nv->value;
+
+       ret = true;
+       goto end;
+
+error:
+       ret = false;
+
+end:
+       return ret;
+}
+
 int loglevel_name_to_value(const char *name, enum lttng_loglevel *loglevel)
 {
        int ret = lookup_value_from_name(loglevel_values,
@@ -158,7 +223,20 @@ int loglevel_name_to_value(const char *name, enum lttng_loglevel *loglevel)
        return ret;
 }
 
-LTTNG_HIDDEN
+bool loglevel_parse_range_string(const char *str,
+               enum lttng_loglevel *min,
+               enum lttng_loglevel *max)
+{
+       int min_int, max_int;
+       bool ret = loglevel_parse_range_string_common(str, loglevel_values,
+                       ARRAY_SIZE(loglevel_values), &min_int, &max_int);
+
+       *min = min_int;
+       *max = max_int;
+
+       return ret;
+}
+
 int loglevel_log4j_name_to_value(
                const char *name, enum lttng_loglevel_log4j *loglevel)
 {
@@ -174,7 +252,21 @@ int loglevel_log4j_name_to_value(
        return ret;
 }
 
-LTTNG_HIDDEN
+bool loglevel_log4j_parse_range_string(const char *str,
+               enum lttng_loglevel_log4j *min,
+               enum lttng_loglevel_log4j *max)
+{
+       int min_int, max_int;
+       bool ret = loglevel_parse_range_string_common(str,
+                       loglevel_log4j_values,
+                       ARRAY_SIZE(loglevel_log4j_values), &min_int, &max_int);
+
+       *min = min_int;
+       *max = max_int;
+
+       return ret;
+}
+
 int loglevel_jul_name_to_value(
                const char *name, enum lttng_loglevel_jul *loglevel)
 {
@@ -190,7 +282,20 @@ int loglevel_jul_name_to_value(
        return ret;
 }
 
-LTTNG_HIDDEN
+bool loglevel_jul_parse_range_string(const char *str,
+               enum lttng_loglevel_jul *min,
+               enum lttng_loglevel_jul *max)
+{
+       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);
+
+       *min = min_int;
+       *max = max_int;
+
+       return ret;
+}
+
 int loglevel_python_name_to_value(
                const char *name, enum lttng_loglevel_python *loglevel)
 {
@@ -206,6 +311,21 @@ int loglevel_python_name_to_value(
        return ret;
 }
 
+bool loglevel_python_parse_range_string(const char *str,
+               enum lttng_loglevel_python *min,
+               enum lttng_loglevel_python *max)
+{
+       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);
+
+       *min = min_int;
+       *max = max_int;
+
+       return ret;
+}
+
 static
 const char *lookup_name_from_value(const struct loglevel_name_value values[],
                size_t values_count, int loglevel)
@@ -225,28 +345,24 @@ end:
        return name;
 }
 
-LTTNG_HIDDEN
 const char *loglevel_value_to_name(int loglevel)
 {
        return lookup_name_from_value(
                        loglevel_values, ARRAY_SIZE(loglevel_values), loglevel);
 }
 
-LTTNG_HIDDEN
 const char *loglevel_log4j_value_to_name(int loglevel)
 {
        return lookup_name_from_value(loglevel_log4j_values,
                        ARRAY_SIZE(loglevel_log4j_values), loglevel);
 }
 
-LTTNG_HIDDEN
 const char *loglevel_jul_value_to_name(int loglevel)
 {
        return lookup_name_from_value(loglevel_jul_values,
                        ARRAY_SIZE(loglevel_jul_values), loglevel);
 }
 
-LTTNG_HIDDEN
 const char *loglevel_python_value_to_name(int loglevel)
 {
        return lookup_name_from_value(loglevel_python_values,
This page took 0.025884 seconds and 4 git commands to generate.