X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Floglevel.c;h=c18bf381c2e030f045a87e4dbef6dc896482f0d0;hp=e59c248131b2cc57885ff6be50eb63b4da1467e1;hb=24de704ea32ddb8841624555457b9c46816090b0;hpb=7e8f2e9cce651c81094a864bbffefcaa4bcc7a51 diff --git a/src/bin/lttng/loglevel.c b/src/bin/lttng/loglevel.c index e59c24813..c18bf381c 100644 --- a/src/bin/lttng/loglevel.c +++ b/src/bin/lttng/loglevel.c @@ -7,11 +7,10 @@ #include "loglevel.h" #include +#include #include #include -#define LOGLEVEL_NAME_VALUE_ARRAY_COUNT(name) (sizeof(name) / sizeof(struct loglevel_name_value)) - struct loglevel_name_value { const char *name; int value; @@ -19,125 +18,107 @@ struct loglevel_name_value { static const struct loglevel_name_value loglevel_values[] = { - { .name = "TRACE_EMERG", .value = LTTNG_LOGLEVEL_EMERG }, { .name = "EMERG", .value = LTTNG_LOGLEVEL_EMERG }, - { .name = "TRACE_ALERT", .value = LTTNG_LOGLEVEL_ALERT }, + { .name = "TRACE_EMERG", .value = LTTNG_LOGLEVEL_EMERG }, { .name = "ALERT", .value = LTTNG_LOGLEVEL_ALERT }, - { .name = "TRACE_CRIT", .value = LTTNG_LOGLEVEL_CRIT }, + { .name = "TRACE_ALERT", .value = LTTNG_LOGLEVEL_ALERT }, { .name = "CRIT", .value = LTTNG_LOGLEVEL_CRIT }, - { .name = "TRACE_ERR", .value = LTTNG_LOGLEVEL_ERR }, + { .name = "TRACE_CRIT", .value = LTTNG_LOGLEVEL_CRIT }, { .name = "ERR", .value = LTTNG_LOGLEVEL_ERR }, - { .name = "TRACE_WARNING", .value = LTTNG_LOGLEVEL_WARNING }, + { .name = "TRACE_ERR", .value = LTTNG_LOGLEVEL_ERR }, { .name = "WARNING", .value = LTTNG_LOGLEVEL_WARNING }, - { .name = "TRACE_NOTICE", .value = LTTNG_LOGLEVEL_NOTICE }, + { .name = "TRACE_WARNING", .value = LTTNG_LOGLEVEL_WARNING }, { .name = "NOTICE", .value = LTTNG_LOGLEVEL_NOTICE }, - { .name = "TRACE_INFO", .value = LTTNG_LOGLEVEL_INFO }, + { .name = "TRACE_NOTICE", .value = LTTNG_LOGLEVEL_NOTICE }, { .name = "INFO", .value = LTTNG_LOGLEVEL_INFO }, - { .name = "TRACE_DEBUG_SYSTEM", .value = LTTNG_LOGLEVEL_DEBUG_SYSTEM }, + { .name = "TRACE_INFO", .value = LTTNG_LOGLEVEL_INFO }, { .name = "DEBUG_SYSTEM", .value = LTTNG_LOGLEVEL_DEBUG_SYSTEM }, + { .name = "TRACE_DEBUG_SYSTEM", .value = LTTNG_LOGLEVEL_DEBUG_SYSTEM }, { .name = "SYSTEM", .value = LTTNG_LOGLEVEL_DEBUG_SYSTEM }, - { .name = "TRACE_DEBUG_PROGRAM", .value = LTTNG_LOGLEVEL_DEBUG_PROGRAM }, { .name = "DEBUG_PROGRAM", .value = LTTNG_LOGLEVEL_DEBUG_PROGRAM }, + { .name = "TRACE_DEBUG_PROGRAM", .value = LTTNG_LOGLEVEL_DEBUG_PROGRAM }, { .name = "PROGRAM", .value = LTTNG_LOGLEVEL_DEBUG_PROGRAM }, - { .name = "TRACE_DEBUG_PROCESS", .value = LTTNG_LOGLEVEL_DEBUG_PROCESS }, { .name = "DEBUG_PROCESS", .value = LTTNG_LOGLEVEL_DEBUG_PROCESS }, + { .name = "TRACE_DEBUG_PROCESS", .value = LTTNG_LOGLEVEL_DEBUG_PROCESS }, { .name = "PROCESS", .value = LTTNG_LOGLEVEL_DEBUG_PROCESS }, - { .name = "TRACE_DEBUG_MODULE", .value = LTTNG_LOGLEVEL_DEBUG_MODULE }, { .name = "DEBUG_MODULE", .value = LTTNG_LOGLEVEL_DEBUG_MODULE }, + { .name = "TRACE_DEBUG_MODULE", .value = LTTNG_LOGLEVEL_DEBUG_MODULE }, { .name = "MODULE", .value = LTTNG_LOGLEVEL_DEBUG_MODULE }, - { .name = "TRACE_DEBUG_UNIT", .value = LTTNG_LOGLEVEL_DEBUG_UNIT }, { .name = "DEBUG_UNIT", .value = LTTNG_LOGLEVEL_DEBUG_UNIT }, + { .name = "TRACE_DEBUG_UNIT", .value = LTTNG_LOGLEVEL_DEBUG_UNIT }, { .name = "UNIT", .value = LTTNG_LOGLEVEL_DEBUG_UNIT }, - { .name = "TRACE_DEBUG_FUNCTION", .value = LTTNG_LOGLEVEL_DEBUG_FUNCTION }, { .name = "DEBUG_FUNCTION", .value = LTTNG_LOGLEVEL_DEBUG_FUNCTION }, + { .name = "TRACE_DEBUG_FUNCTION", .value = LTTNG_LOGLEVEL_DEBUG_FUNCTION }, { .name = "FUNCTION", .value = LTTNG_LOGLEVEL_DEBUG_FUNCTION }, - { .name = "TRACE_DEBUG_LINE", .value = LTTNG_LOGLEVEL_DEBUG_LINE }, { .name = "DEBUG_LINE", .value = LTTNG_LOGLEVEL_DEBUG_LINE }, + { .name = "TRACE_DEBUG_LINE", .value = LTTNG_LOGLEVEL_DEBUG_LINE }, { .name = "LINE", .value = LTTNG_LOGLEVEL_DEBUG_LINE }, - { .name = "TRACE_DEBUG", .value = LTTNG_LOGLEVEL_DEBUG }, { .name = "DEBUG", .value = LTTNG_LOGLEVEL_DEBUG }, + { .name = "TRACE_DEBUG", .value = LTTNG_LOGLEVEL_DEBUG }, }; static const struct loglevel_name_value loglevel_log4j_values[] = { - { .name = "LOG4J_OFF", .value = LTTNG_LOGLEVEL_LOG4J_OFF }, { .name = "OFF", .value = LTTNG_LOGLEVEL_LOG4J_OFF }, - { .name = "LOG4J_FATAL", .value = LTTNG_LOGLEVEL_LOG4J_FATAL }, + { .name = "LOG4J_OFF", .value = LTTNG_LOGLEVEL_LOG4J_OFF }, { .name = "FATAL", .value = LTTNG_LOGLEVEL_LOG4J_FATAL }, - { .name = "LOG4J_ERROR", .value = LTTNG_LOGLEVEL_LOG4J_ERROR }, + { .name = "LOG4J_FATAL", .value = LTTNG_LOGLEVEL_LOG4J_FATAL }, { .name = "ERROR", .value = LTTNG_LOGLEVEL_LOG4J_ERROR }, - { .name = "LOG4J_WARN", .value = LTTNG_LOGLEVEL_LOG4J_WARN }, + { .name = "LOG4J_ERROR", .value = LTTNG_LOGLEVEL_LOG4J_ERROR }, { .name = "WARN", .value = LTTNG_LOGLEVEL_LOG4J_WARN }, - { .name = "LOG4J_INFO", .value = LTTNG_LOGLEVEL_LOG4J_INFO }, + { .name = "LOG4J_WARN", .value = LTTNG_LOGLEVEL_LOG4J_WARN }, { .name = "INFO", .value = LTTNG_LOGLEVEL_LOG4J_INFO }, - { .name = "LOG4J_DEBUG", .value = LTTNG_LOGLEVEL_LOG4J_DEBUG }, + { .name = "LOG4J_INFO", .value = LTTNG_LOGLEVEL_LOG4J_INFO }, { .name = "DEBUG", .value = LTTNG_LOGLEVEL_LOG4J_DEBUG }, - { .name = "LOG4J_TRACE", .value = LTTNG_LOGLEVEL_LOG4J_TRACE }, + { .name = "LOG4J_DEBUG", .value = LTTNG_LOGLEVEL_LOG4J_DEBUG }, { .name = "TRACE", .value = LTTNG_LOGLEVEL_LOG4J_TRACE }, - { .name = "LOG4J_ALL", .value = LTTNG_LOGLEVEL_LOG4J_ALL }, + { .name = "LOG4J_TRACE", .value = LTTNG_LOGLEVEL_LOG4J_TRACE }, { .name = "ALL", .value = LTTNG_LOGLEVEL_LOG4J_ALL }, + { .name = "LOG4J_ALL", .value = LTTNG_LOGLEVEL_LOG4J_ALL }, }; static const struct loglevel_name_value loglevel_jul_values[] = { - { .name = "JUL_OFF", .value = LTTNG_LOGLEVEL_JUL_OFF }, { .name = "OFF", .value = LTTNG_LOGLEVEL_JUL_OFF }, - { .name = "JUL_SEVERE", .value = LTTNG_LOGLEVEL_JUL_SEVERE }, + { .name = "JUL_OFF", .value = LTTNG_LOGLEVEL_JUL_OFF }, { .name = "SEVERE", .value = LTTNG_LOGLEVEL_JUL_SEVERE }, - { .name = "JUL_WARNING", .value = LTTNG_LOGLEVEL_JUL_WARNING }, + { .name = "JUL_SEVERE", .value = LTTNG_LOGLEVEL_JUL_SEVERE }, { .name = "WARNING", .value = LTTNG_LOGLEVEL_JUL_WARNING }, - { .name = "JUL_INFO", .value = LTTNG_LOGLEVEL_JUL_INFO }, + { .name = "JUL_WARNING", .value = LTTNG_LOGLEVEL_JUL_WARNING }, { .name = "INFO", .value = LTTNG_LOGLEVEL_JUL_INFO }, - { .name = "JUL_CONFIG", .value = LTTNG_LOGLEVEL_JUL_CONFIG }, + { .name = "JUL_INFO", .value = LTTNG_LOGLEVEL_JUL_INFO }, { .name = "CONFIG", .value = LTTNG_LOGLEVEL_JUL_CONFIG }, - { .name = "JUL_FINE", .value = LTTNG_LOGLEVEL_JUL_FINE }, + { .name = "JUL_CONFIG", .value = LTTNG_LOGLEVEL_JUL_CONFIG }, { .name = "FINE", .value = LTTNG_LOGLEVEL_JUL_FINE }, - { .name = "JUL_FINER", .value = LTTNG_LOGLEVEL_JUL_FINER }, + { .name = "JUL_FINE", .value = LTTNG_LOGLEVEL_JUL_FINE }, { .name = "FINER", .value = LTTNG_LOGLEVEL_JUL_FINER }, - { .name = "JUL_FINEST", .value = LTTNG_LOGLEVEL_JUL_FINEST }, + { .name = "JUL_FINER", .value = LTTNG_LOGLEVEL_JUL_FINER }, { .name = "FINEST", .value = LTTNG_LOGLEVEL_JUL_FINEST }, - { .name = "JUL_ALL", .value = LTTNG_LOGLEVEL_JUL_ALL }, + { .name = "JUL_FINEST", .value = LTTNG_LOGLEVEL_JUL_FINEST }, { .name = "ALL", .value = LTTNG_LOGLEVEL_JUL_ALL }, + { .name = "JUL_ALL", .value = LTTNG_LOGLEVEL_JUL_ALL }, }; static const struct loglevel_name_value loglevel_python_values[] = { - { .name = "PYTHON_CRITICAL", .value = LTTNG_LOGLEVEL_PYTHON_CRITICAL }, { .name = "CRITICAL", .value = LTTNG_LOGLEVEL_PYTHON_CRITICAL }, - { .name = "PYTHON_ERROR", .value = LTTNG_LOGLEVEL_PYTHON_ERROR }, + { .name = "PYTHON_CRITICAL", .value = LTTNG_LOGLEVEL_PYTHON_CRITICAL }, { .name = "ERROR", .value = LTTNG_LOGLEVEL_PYTHON_ERROR }, - { .name = "PYTHON_WARNING", .value = LTTNG_LOGLEVEL_PYTHON_WARNING }, + { .name = "PYTHON_ERROR", .value = LTTNG_LOGLEVEL_PYTHON_ERROR }, { .name = "WARNING", .value = LTTNG_LOGLEVEL_PYTHON_WARNING }, - { .name = "PYTHON_INFO", .value = LTTNG_LOGLEVEL_PYTHON_INFO }, + { .name = "PYTHON_WARNING", .value = LTTNG_LOGLEVEL_PYTHON_WARNING }, { .name = "INFO", .value = LTTNG_LOGLEVEL_PYTHON_INFO }, - { .name = "PYTNON_DEBUG", .value = LTTNG_LOGLEVEL_PYTHON_DEBUG }, + { .name = "PYTHON_INFO", .value = LTTNG_LOGLEVEL_PYTHON_INFO }, { .name = "DEBUG", .value = LTTNG_LOGLEVEL_PYTHON_DEBUG }, - { .name = "PYTHON_NOTSET", .value = LTTNG_LOGLEVEL_PYTHON_NOTSET }, + { .name = "PYTNON_DEBUG", .value = LTTNG_LOGLEVEL_PYTHON_DEBUG }, { .name = "NOTSET", .value = LTTNG_LOGLEVEL_PYTHON_NOTSET }, + { .name = "PYTHON_NOTSET", .value = LTTNG_LOGLEVEL_PYTHON_NOTSET }, }; static bool string_equal_insensitive(const char *a, const char *b) { - bool result; - - assert(a && b); - - while (*a && *b) { - if (toupper(*a) != toupper(*b)) { - result = false; - goto end; - } - - a++; - b++; - } - - /* If a and b don't have the same length, consider them unequal. */ - result = *a == *b; - -end: - return result; + return strcasecmp(a, b) == 0; } static @@ -167,7 +148,7 @@ LTTNG_HIDDEN int loglevel_name_to_value(const char *name, enum lttng_loglevel *loglevel) { int ret = lookup_value_from_name(loglevel_values, - LOGLEVEL_NAME_VALUE_ARRAY_COUNT(loglevel_values), name); + ARRAY_SIZE(loglevel_values), name); if (ret >= 0) { *loglevel = (typeof(*loglevel)) ret; @@ -182,7 +163,7 @@ int loglevel_log4j_name_to_value( const char *name, enum lttng_loglevel_log4j *loglevel) { int ret = lookup_value_from_name(loglevel_log4j_values, - LOGLEVEL_NAME_VALUE_ARRAY_COUNT(loglevel_log4j_values), + ARRAY_SIZE(loglevel_log4j_values), name); if (ret >= 0) { @@ -198,7 +179,7 @@ int loglevel_jul_name_to_value( const char *name, enum lttng_loglevel_jul *loglevel) { int ret = lookup_value_from_name(loglevel_jul_values, - LOGLEVEL_NAME_VALUE_ARRAY_COUNT(loglevel_jul_values), + ARRAY_SIZE(loglevel_jul_values), name); if (ret >= 0) { @@ -214,7 +195,7 @@ int loglevel_python_name_to_value( const char *name, enum lttng_loglevel_python *loglevel) { int ret = lookup_value_from_name(loglevel_python_values, - LOGLEVEL_NAME_VALUE_ARRAY_COUNT(loglevel_python_values), + ARRAY_SIZE(loglevel_python_values), name); if (ret >= 0) { @@ -223,4 +204,51 @@ int loglevel_python_name_to_value( } return ret; -} \ No newline at end of file +} + +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; + + for (i = 0; i < values_count; i++) { + if (values[i].value == loglevel) { + /* Match found. */ + name = values[i].name; + goto end; + } + } + +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, + ARRAY_SIZE(loglevel_python_values), loglevel); +}