From e77ae3a2c0328590b43447550bdb1284650b8236 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 19 Oct 1999 20:03:34 +0000 Subject: Added sfdisk. Ststic-ified a bunch of stuff. --- util-linux/dmesg.c | 128 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 55 deletions(-) (limited to 'util-linux/dmesg.c') diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c index e5d403f7a..aa26f5836 100644 --- a/util-linux/dmesg.c +++ b/util-linux/dmesg.c @@ -1,45 +1,49 @@ -#include "internal.h" -#include -#include -#include - /* dmesg.c -- Print out the contents of the kernel ring buffer * Created: Sat Oct 9 16:19:47 1993 * Revised: Thu Oct 28 21:52:17 1993 by faith@cs.unc.edu * Copyright 1993 Theodore Ts'o (tytso@athena.mit.edu) * This program comes with ABSOLUTELY NO WARRANTY. * Modifications by Rick Sladkey (jrs@world.std.com) - * from util-linux; adapted for busybox + * Larger buffersize 3 June 1998 by Nicolai Langfeldt, based on a patch + * by Peeter Joot. This was also suggested by John Hudson. + * 1999-02-22 Arkadiusz Mi¶kiewicz + * - added Native Language Support + * + * from util-linux -- adapted for busybox by + * Erik Andersen . I ripped out Native Language + * Support, replaced getopt, added some gotos for redundant stuff. */ +#include "internal.h" #include #include +#include +#include -#define __NR_klog __NR_syslog - -#if defined(__GLIBC__) -#include -#define klog klogctl -#else -static inline _syscall3 (int, klog, int, type, char *, b, int, len) -#endif /* __GLIBC__ */ +#if __GNU_LIBRARY__ < 5 +#ifndef __alpha__ +# define __NR_klogctl __NR_syslog + static inline _syscall3(int, klogctl, int, type, char *, b, int, len); +#else /* __alpha__ */ +#define klogctl syslog +#endif +#else +# include +#endif -static const char dmesg_usage[] = "dmesg [-c] [-n level]\n"; +static const char dmesg_usage[] = "dmesg [-c] [-n level] [-s bufsize]\n"; -int dmesg_main (int argc, char **argv) +int dmesg_main( int argc, char** argv ) { - - char buf[4096]; - int i; - int n; - int level = 0; - int lastc; - int cmd = 3; - - argc--; - argv++; + char *buf; + int bufsize=8196; + int i; + int n; + int level = 0; + int lastc; + int cmd = 3; /* Parse any options */ while (argc && **argv == '-') { @@ -56,43 +60,57 @@ int dmesg_main (int argc, char **argv) --argc; ++argv; break; + case 's': + if (--argc == 0) + goto end; + bufsize = atoi (*(++argv)); + --argc; + ++argv; + break; default: goto end; } } + + if (argc > 1) { + goto end; + } - if (cmd == 8) { - n = klog (cmd, NULL, level); - if (n < 0) { - perror ("klog"); - exit (FALSE); - } - exit (TRUE); - } + if (cmd == 8) { + n = klogctl( cmd, NULL, level ); + if (n < 0) { + goto klogctl_error; + } + exit( TRUE ); + } - n = klog (cmd, buf, sizeof (buf)); - if (n < 0) { - perror ("klog"); - exit (FALSE); - } + if (bufsize < 4096) bufsize = 4096; + buf = (char*)malloc(bufsize); + n = klogctl( cmd, buf, bufsize ); + if (n < 0) { + goto klogctl_error; + } - lastc = '\n'; - for (i = 0; i < n; i++) { - if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { + lastc = '\n'; + for (i = 0; i < n; i++) { + if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { + i++; + while (buf[i] >= '0' && buf[i] <= '9') i++; - while (buf[i] >= '0' && buf[i] <= '9') - i++; - if (buf[i] == '>') - i++; - } - lastc = buf[i]; - putchar (lastc); - } - if (lastc != '\n') - putchar ('\n'); - exit (TRUE); - - end: + if (buf[i] == '>') + i++; + } + lastc = buf[i]; + putchar( lastc ); + } + if (lastc != '\n') + putchar( '\n' ); + exit( TRUE); +end: usage( dmesg_usage); exit (FALSE); +klogctl_error: + perror( "klogctl" ); + exit( FALSE ); + } -- cgit v1.2.3