X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Fdmesg.c;h=e543446c11c87e02c6d92c28518eeda796c1130c;hb=066e76befe5d39fc3451846af94cbba96747186c;hp=06a03d3fb76af17c29b101ca56a87de0bdd9feae;hpb=0ef64bdb40c54681e8dd5ab8df42ac88e4ab1d4a;p=oweals%2Fbusybox.git diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c index 06a03d3fb..e543446c1 100644 --- a/util-linux/dmesg.c +++ b/util-linux/dmesg.c @@ -8,6 +8,16 @@ * * Licensed under GPLv2, see file LICENSE in this source tree. */ + +//usage:#define dmesg_trivial_usage +//usage: "[-c] [-n LEVEL] [-s SIZE]" +//usage:#define dmesg_full_usage "\n\n" +//usage: "Print or control the kernel ring buffer\n" +//usage: "\n -c Clear ring buffer after printing" +//usage: "\n -n LEVEL Set console logging level" +//usage: "\n -s SIZE Buffer size" +//usage: "\n -r Print raw message buffer" + #include #include "libbb.h" @@ -20,11 +30,12 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv) enum { OPT_c = 1 << 0, OPT_s = 1 << 1, - OPT_n = 1 << 2 + OPT_n = 1 << 2, + OPT_r = 1 << 3 }; opt_complementary = "s+:n+"; /* numeric */ - opts = getopt32(argv, "cs:n:", &len, &level); + opts = getopt32(argv, "cs:n:r", &len, &level); if (opts & OPT_n) { if (klogctl(8, NULL, (long) level)) bb_perror_msg_and_die("klogctl"); @@ -45,20 +56,24 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv) if (len == 0) return EXIT_SUCCESS; - /* Skip <#> at the start of lines, and make sure we end with a newline */ - if (ENABLE_FEATURE_DMESG_PRETTY) { + if (ENABLE_FEATURE_DMESG_PRETTY && !(opts & OPT_r)) { int last = '\n'; int in = 0; - do { - if (last == '\n' && buf[in] == '<') - in += 3; - else { + /* Skip <[0-9]+> at the start of lines */ + while (1) { + if (last == '\n' && buf[in] == '<') { + while (buf[in++] != '>' && in < len) + ; + } else { last = buf[in++]; - bb_putchar(last); + putchar(last); } - } while (in < len); + if (in >= len) + break; + } + /* Make sure we end with a newline */ if (last != '\n') bb_putchar('\n'); } else {