1 /* dmesg.c -- Print out the contents of the kernel ring buffer
2 * Created: Sat Oct 9 16:19:47 1993
3 * Revised: Thu Oct 28 21:52:17 1993 by faith@cs.unc.edu
4 * Copyright 1993 Theodore Ts'o (tytso@athena.mit.edu)
5 * This program comes with ABSOLUTELY NO WARRANTY.
6 * Modifications by Rick Sladkey (jrs@world.std.com)
7 * Larger buffersize 3 June 1998 by Nicolai Langfeldt, based on a patch
8 * by Peeter Joot. This was also suggested by John Hudson.
9 * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@misiek.eu.org>
10 * - added Native Language Support
12 * from util-linux -- adapted for busybox by
13 * Erik Andersen <andersee@debian.org>. I ripped out Native Language
14 * Support, replaced getopt, added some gotos for redundant stuff.
18 #include <linux/unistd.h>
23 #if __GNU_LIBRARY__ < 5
26 # define __NR_klogctl __NR_syslog
27 static inline _syscall3(int, klogctl, int, type, char *, b, int, len);
29 #define klogctl syslog
33 # include <sys/klog.h>
36 static const char dmesg_usage[] = "dmesg [-c] [-n level] [-s bufsize]\n";
38 int dmesg_main( int argc, char** argv )
48 /* Parse any options */
49 while (argc && **argv == '-') {
59 level = atoi (*(++argv));
66 bufsize = atoi (*(++argv));
80 n = klogctl( cmd, NULL, level );
87 if (bufsize < 4096) bufsize = 4096;
88 buf = (char*)malloc(bufsize);
89 n = klogctl( cmd, buf, bufsize );
95 for (i = 0; i < n; i++) {
96 if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
98 while (buf[i] >= '0' && buf[i] <= '9')