dmesg: handle multi-char log levels

Since Linux 3.5 (7ff9554bb5: printk: convert byte-buffer to variable-length
record buffer), klog buffer can now contain log lines with multi-char
loglevel indicators (<[0-9]+>) - So we can no longer just skip 3 bytes.

Instead skip past the terminating '>' like util-linux does.

function                                             old     new   delta
dmesg_main                                           266     280     +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 13/0)               Total: 13 bytes

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Peter Korsgaard 2013-01-06 00:07:17 +01:00 committed by Mike Frysinger
parent fb499c5752
commit 3917fa32dc

View File

@ -59,16 +59,15 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv)
int last = '\n'; int last = '\n';
int in = 0; int in = 0;
/* Skip <#> at the start of lines */ /* Skip <[0-9]+> at the start of lines */
while (1) { while (1) {
if (last == '\n' && buf[in] == '<') { if (last == '\n' && buf[in] == '<') {
in += 3; while (buf[in++] != '>' && in < len)
if (in >= len) ;
break; } else {
last = buf[in++];
putchar(last);
} }
last = buf[in];
putchar(last);
in++;
if (in >= len) if (in >= len)
break; break;
} }