X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Floglevel.c;h=054510e85b3a493c0844bdc9baff90c624f86e9a;hb=81663f073dbfb4b61c06a0ceb8ca33c4fc41b1c5;hp=c18bf381c2e030f045a87e4dbef6dc896482f0d0;hpb=85b053182c4e300c717483ad231f5c04cbf5e4b7;p=lttng-tools.git diff --git a/src/bin/lttng/loglevel.c b/src/bin/lttng/loglevel.c index c18bf381c..054510e85 100644 --- a/src/bin/lttng/loglevel.c +++ b/src/bin/lttng/loglevel.c @@ -9,7 +9,6 @@ #include #include #include -#include 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,