summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2023-06-22 09:59:18 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2023-06-22 09:59:18 +0200
commitbd346dbf8eec2944a613e58675dc15ee52ee7dc1 (patch)
tree7d229a7a68d43f135ece573d9f9a2fbd3b266786 /commands
parent440f9ded5bf2fda32c7618d988065ba3b227831f (diff)
parentd78884a29d13046dc1e56a3519abd328a88fdf11 (diff)
downloadbarebox-bd346dbf8eec2944a613e58675dc15ee52ee7dc1.tar.gz
barebox-bd346dbf8eec2944a613e58675dc15ee52ee7dc1.tar.xz
Merge branch 'for-next/dmesg'
Diffstat (limited to 'commands')
-rw-r--r--commands/dmesg.c91
1 files changed, 70 insertions, 21 deletions
diff --git a/commands/dmesg.c b/commands/dmesg.c
index 15ad449639..83410234e1 100644
--- a/commands/dmesg.c
+++ b/commands/dmesg.c
@@ -11,6 +11,42 @@
#include <getopt.h>
#include <clock.h>
+static int str_to_loglevel(const char *str)
+{
+ int ret;
+ unsigned long level;
+
+ ret = kstrtoul(str, 10, &level);
+ if (!ret) {
+ if (level > MSG_VDEBUG)
+ goto unknown;
+ return level;
+ }
+
+ if (!strcmp(str, "vdebug"))
+ return MSG_VDEBUG;
+ if (!strcmp(str, "debug"))
+ return MSG_DEBUG;
+ if (!strcmp(str, "info"))
+ return MSG_INFO;
+ if (!strcmp(str, "notice"))
+ return MSG_NOTICE;
+ if (!strcmp(str, "warn"))
+ return MSG_WARNING;
+ if (!strcmp(str, "err"))
+ return MSG_ERR;
+ if (!strcmp(str, "crit"))
+ return MSG_CRIT;
+ if (!strcmp(str, "alert"))
+ return MSG_ALERT;
+ if (!strcmp(str, "emerg"))
+ return MSG_EMERG;
+unknown:
+ printf("dmesg: unknown loglevel %s\n", str);
+
+ return -EINVAL;
+}
+
static unsigned dmesg_get_levels(const char *__args)
{
char *args = xstrdup(__args);
@@ -18,28 +54,19 @@ static unsigned dmesg_get_levels(const char *__args)
unsigned flags = 0;
while (1) {
+ int level;
+
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;
+ level = str_to_loglevel(str);
+ if (level < 0) {
+ flags = 0;
+ break;
+ }
+
+ flags |= BIT(level);
}
free(args);
@@ -52,8 +79,9 @@ static int do_dmesg(int argc, char *argv[])
int opt, i;
int delete_buf = 0, emit = 0;
unsigned flags = 0, levels = 0;
+ char *set = NULL;
- while ((opt = getopt(argc, argv, "ctderl:")) > 0) {
+ while ((opt = getopt(argc, argv, "ctderl:n:")) > 0) {
switch (opt) {
case 'c':
delete_buf = 1;
@@ -70,16 +98,30 @@ static int do_dmesg(int argc, char *argv[])
case 'l':
levels = dmesg_get_levels(optarg);
if (!levels)
- return COMMAND_ERROR_USAGE;
+ return COMMAND_ERROR;
break;
case 'r':
flags |= BAREBOX_LOG_PRINT_RAW | BAREBOX_LOG_PRINT_TIME;
break;
+ case 'n':
+ set = optarg;
+ break;
default:
return COMMAND_ERROR_USAGE;
}
}
+ if (set) {
+ int level = str_to_loglevel(set);
+
+ if (level < 0)
+ return COMMAND_ERROR;
+
+ barebox_loglevel = level;
+
+ return 0;
+ }
+
if (emit) {
char *buf;
int len = 0;
@@ -114,12 +156,19 @@ static int do_dmesg(int argc, char *argv[])
return 0;
}
+
BAREBOX_CMD_HELP_START(dmesg)
+BAREBOX_CMD_HELP_TEXT("print or control the barebox message buffer")
+BAREBOX_CMD_HELP_TEXT("Loglevels can be specified as number (0=emerg, 7=vdebug)")
+BAREBOX_CMD_HELP_TEXT("Known debug loglevels are: emerg, alert, crit, err, warn, notice, info, debug,")
+BAREBOX_CMD_HELP_TEXT("vdebug")
+BAREBOX_CMD_HELP_TEXT("")
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 <msg>", "Emit a log message")
-BAREBOX_CMD_HELP_OPT ("-l <vdebug|debug|info|notice|warn|err|crit|alert|emerg>", "Restrict output to the given (comma-separated) list of levels")
+BAREBOX_CMD_HELP_OPT ("-l <loglevel>", "Restrict output to the given (comma-separated) list of levels")
+BAREBOX_CMD_HELP_OPT ("-n <loglevel>", "Set level at which printing of messages is done to the console")
BAREBOX_CMD_HELP_OPT ("-r", "Print timestamp and log-level prefixes.")
BAREBOX_CMD_HELP_OPT ("-t", "Show timestamp informations")
BAREBOX_CMD_HELP_END