From 34b9ee02ae460f4283f6096db308d5e7f8f36d45 Mon Sep 17 00:00:00 2001 From: Oleksij Rempel Date: Thu, 21 Feb 2019 14:26:03 +0100 Subject: commands: dmesg: add -l option to restrict output level Same as linux dmesg, barebox dmesg will be able to restrict output level by using -l option. For example "dmesg -l err,warn" This functionality can be used for test automation. Signed-off-by: Oleksij Rempel Signed-off-by: Sascha Hauer --- commands/dmesg.c | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'commands') diff --git a/commands/dmesg.c b/commands/dmesg.c index 5c2728581d..a7def2f158 100644 --- a/commands/dmesg.c +++ b/commands/dmesg.c @@ -24,13 +24,49 @@ #include #include +static unsigned dmesg_get_levels(const char *__args) +{ + char *args = xstrdup(__args); + char *str, *levels = args; + unsigned flags = 0; + + while (1) { + str = strsep(&levels, ","); + if (!str) + break; + + if(!strcmp(str, "vdebug")) + flags |= BAREBOX_LOG_PRINT_VDEBUG; + else if(!strcmp(str, "debug")) + flags |= BAREBOX_LOG_PRINT_DEBUG; + else if(!strcmp(str, "info")) + flags |= BAREBOX_LOG_PRINT_INFO; + else if(!strcmp(str, "notice")) + flags |= BAREBOX_LOG_PRINT_NOTICE; + else if(!strcmp(str, "warn")) + flags |= BAREBOX_LOG_PRINT_WARNING; + else if(!strcmp(str, "err")) + flags |= BAREBOX_LOG_PRINT_ERR; + else if(!strcmp(str, "crit")) + flags |= BAREBOX_LOG_PRINT_CRIT; + else if(!strcmp(str, "alert")) + flags |= BAREBOX_LOG_PRINT_ALERT; + else if(!strcmp(str, "emerg")) + flags |= BAREBOX_LOG_PRINT_EMERG; + } + + free(args); + + return flags; +} + static int do_dmesg(int argc, char *argv[]) { int opt, i; int delete_buf = 0, emit = 0; - unsigned flags = 0; + unsigned flags = 0, levels = 0; - while ((opt = getopt(argc, argv, "ctder")) > 0) { + while ((opt = getopt(argc, argv, "ctderl:")) > 0) { switch (opt) { case 'c': delete_buf = 1; @@ -44,6 +80,11 @@ static int do_dmesg(int argc, char *argv[]) case 'e': emit = 1; break; + case 'l': + levels = dmesg_get_levels(optarg); + if (!levels) + return COMMAND_ERROR_USAGE; + break; case 'r': flags |= BAREBOX_LOG_PRINT_RAW | BAREBOX_LOG_PRINT_TIME; break; @@ -78,7 +119,7 @@ static int do_dmesg(int argc, char *argv[]) return 0; } - log_print(flags); + log_print(flags, levels); if (delete_buf) log_clean(10); @@ -91,6 +132,7 @@ BAREBOX_CMD_HELP_TEXT("Options:") BAREBOX_CMD_HELP_OPT ("-c", "Delete messages after printing them") BAREBOX_CMD_HELP_OPT ("-d", "Show a time delta to the last message") BAREBOX_CMD_HELP_OPT ("-e ", "Emit a log message") +BAREBOX_CMD_HELP_OPT ("-l ", "Restrict output to the given (comma-separated) list of levels") BAREBOX_CMD_HELP_OPT ("-r", "Print timestamp and log-level prefixes.") BAREBOX_CMD_HELP_OPT ("-t", "Show timestamp informations") BAREBOX_CMD_HELP_END -- cgit v1.2.3