From 15d0884cae893c924533393aad6b40d232e694d7 Mon Sep 17 00:00:00 2001 From: Philipp Kaeser Date: Thu, 13 Aug 2026 21:20:39 +0200 Subject: [PATCH] args: Adds --log_level definition, to share across clients. --- include/libbase/arg.h | 12 ++++++++++++ src/arg.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/include/libbase/arg.h b/include/libbase/arg.h index b5f1e4e..ade49c2 100644 --- a/include/libbase/arg.h +++ b/include/libbase/arg.h @@ -22,6 +22,7 @@ #ifndef __LIBBASE_ARG_H__ #define __LIBBASE_ARG_H__ +#include "log.h" #include "test.h" #include @@ -205,6 +206,17 @@ void bs_arg_cleanup(const bs_arg_t *arg_ptr); */ int bs_arg_print_usage(FILE *stream_ptr, const bs_arg_t *arg_ptr); +/** Severity level names, for logging. Used for bs_arg_log_level. */ +extern const bs_arg_enum_table_t bs_arg_log_level_names[]; + +/** Common commandline arg for `--log_level`. Sets @ref bs_log_severity. */ +static const bs_arg_t bs_arg_log_level = BS_ARG_ENUM( + "log_level", + "Log level to apply. One of DEBUG, INFO, WARNING, ERROR.", + "INFO", + &bs_arg_log_level_names[0], + (int*)&bs_log_severity); + /** Unit test set. */ extern const bs_test_set_t bs_arg_test_set; diff --git a/src/arg.c b/src/arg.c index b1bd0d3..fa4c575 100644 --- a/src/arg.c +++ b/src/arg.c @@ -90,6 +90,14 @@ static bool lookup_enum(const bs_arg_enum_table_t *lookup_table, static const char *bs_arg_bool_value_true = "true"; static const char *bs_arg_bool_value_false = "false"; +const bs_arg_enum_table_t bs_arg_log_level_names[] = { + { .name_ptr = "DEBUG", BS_DEBUG }, + { .name_ptr = "INFO", BS_INFO }, + { .name_ptr = "WARNING", BS_WARNING }, + { .name_ptr = "ERROR", BS_ERROR }, + { .name_ptr = NULL }, +}; + /* == Exported methods ===================================================== */ /* ------------------------------------------------------------------------- */ @@ -673,6 +681,7 @@ static void bs_arg_test_parse_arg_for_enum(bs_test_t *test_ptr); static void bs_arg_test_set_defaults(bs_test_t *test_ptr); static void bs_arg_test_parse(bs_test_t *test_ptr); static void bs_arg_test_check_arg(bs_test_t *test_ptr); +static void bs_arg_test_log_level(bs_test_t *test_ptr); /** Unit test cases. */ static const bs_test_case_t bs_arg_test_cases[] = { @@ -687,6 +696,7 @@ static const bs_test_case_t bs_arg_test_cases[] = { { true, "set_defaults", bs_arg_test_set_defaults }, { true, "parse", bs_arg_test_parse }, { true, "check_arg", bs_arg_test_check_arg }, + { true, "log_level", bs_arg_test_log_level }, { false, NULL, NULL } }; @@ -1030,4 +1040,24 @@ static void bs_arg_test_check_arg(bs_test_t *test_ptr) BS_TEST_VERIFY_TRUE(test_ptr, check_arg(valid_args)); } +/* ------------------------------------------------------------------------- */ +void bs_arg_test_log_level(bs_test_t *test_ptr) +{ + static const bs_arg_t args[] = { + bs_arg_log_level, + BS_ARG_SENTINEL() + }; + + const char *argv[] = { "program", "--log_level", "DEBUG" }; + int argc = sizeof(argv) / sizeof(const char*); + + bs_log_severity_t log_level = bs_log_severity; + bs_log_severity = BS_INFO; + BS_TEST_VERIFY_TRUE( + test_ptr, + bs_arg_parse(args, BS_ARG_MODE_NO_EXTRA, &argc, argv)); + BS_TEST_VERIFY_EQ(test_ptr, BS_DEBUG, bs_log_severity); + bs_log_severity = log_level; +} + /* == End of arg.c ========================================================= */