diff options
author | Eric Andersen | 1999-10-19 20:03:34 +0000 |
---|---|---|
committer | Eric Andersen | 1999-10-19 20:03:34 +0000 |
commit | e77ae3a2c0328590b43447550bdb1284650b8236 (patch) | |
tree | 1e46d5cf36870771a4f3cedfe84f6161c3871131 /dmesg.c | |
parent | a3f09076ef5e9a2c26b4d0728cd066bba6c474e4 (diff) | |
download | busybox-e77ae3a2c0328590b43447550bdb1284650b8236.zip busybox-e77ae3a2c0328590b43447550bdb1284650b8236.tar.gz |
Added sfdisk. Ststic-ified a bunch of stuff.
Diffstat (limited to 'dmesg.c')
-rw-r--r-- | dmesg.c | 128 |
1 files changed, 73 insertions, 55 deletions
@@ -1,45 +1,49 @@ -#include "internal.h" -#include <stdlib.h> -#include <unistd.h> -#include <time.h> - /* 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 <misiek@misiek.eu.org> + * - added Native Language Support + * + * from util-linux -- adapted for busybox by + * Erik Andersen <andersee@debian.org>. I ripped out Native Language + * Support, replaced getopt, added some gotos for redundant stuff. */ +#include "internal.h" #include <linux/unistd.h> #include <stdio.h> +#include <getopt.h> +#include <stdlib.h> -#define __NR_klog __NR_syslog - -#if defined(__GLIBC__) -#include <sys/klog.h> -#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 <sys/klog.h> +#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 ); + } |