X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Floglevel.c;h=07f3cb71105127b36df329b44996109c967422dc;hb=a0377dfefe40662ba7d68617bce6ff467114136c;hp=c18bf381c2e030f045a87e4dbef6dc896482f0d0;hpb=85b053182c4e300c717483ad231f5c04cbf5e4b7;p=lttng-tools.git diff --git a/src/bin/lttng/loglevel.c b/src/bin/lttng/loglevel.c index c18bf381c..07f3cb711 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,6 +143,73 @@ end: return ret; } +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; +} + LTTNG_HIDDEN int loglevel_name_to_value(const char *name, enum lttng_loglevel *loglevel) { @@ -158,6 +224,21 @@ 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; +} + LTTNG_HIDDEN int loglevel_log4j_name_to_value( const char *name, enum lttng_loglevel_log4j *loglevel) @@ -174,6 +255,22 @@ 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; +} + LTTNG_HIDDEN int loglevel_jul_name_to_value( const char *name, enum lttng_loglevel_jul *loglevel) @@ -190,6 +287,21 @@ 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; +} + LTTNG_HIDDEN int loglevel_python_name_to_value( const char *name, enum lttng_loglevel_python *loglevel) @@ -206,6 +318,22 @@ int loglevel_python_name_to_value( return ret; } +LTTNG_HIDDEN +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)