X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Fdmesg.c;h=73de6d1ae9ba84bf65f72f34b1f713b97fd208be;hb=44608e9693b03661fbab5e27650bb040c6871d11;hp=c4f4fb408f6810c23f82ae0b236ac46095d9fca9;hpb=330fd2b5767110f29544131d4c72c77e0506b6df;p=oweals%2Fbusybox.git diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c index c4f4fb408..73de6d1ae 100644 --- a/util-linux/dmesg.c +++ b/util-linux/dmesg.c @@ -15,102 +15,71 @@ * Support, replaced getopt, added some gotos for redundant stuff. */ -#include "internal.h" -#include #include #include +#include #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 - +# ifdef __alpha__ +# define klogctl syslog +# endif #else # include #endif -static const char dmesg_usage[] = "dmesg [-c] [-n LEVEL] [-s SIZE]\n" -#ifndef BB_FEATURE_TRIVIAL_HELP - "\nPrints or controls the kernel ring buffer\n\n" - "Options:\n" - "\t-c\t\tClears the ring buffer's contents after printing\n" - "\t-n LEVEL\tSets console logging level\n" - "\t-s SIZE\t\tUse a buffer of size SIZE\n" -#endif - ; +#include "busybox.h" int dmesg_main(int argc, char **argv) { char *buf; + int c; int bufsize = 8196; int i; int n; int level = 0; int lastc; int cmd = 3; - int stopDoingThat; - - argc--; - argv++; - /* Parse any options */ - while (argc && **argv == '-') { - stopDoingThat = FALSE; - while (stopDoingThat == FALSE && *++(*argv)) { - switch (**argv) { - case 'c': - cmd = 4; - break; - case 'n': - cmd = 8; - if (--argc == 0) - goto end; - level = atoi(*(++argv)); - if (--argc > 0) - ++argv; - stopDoingThat = TRUE; - break; - case 's': - if (--argc == 0) - goto end; - bufsize = atoi(*(++argv)); - if (--argc > 0) - ++argv; - stopDoingThat = TRUE; - break; - default: - goto end; - } + while ((c = getopt(argc, argv, "cn:s:")) != EOF) { + switch (c) { + case 'c': + cmd = 4; + break; + case 'n': + cmd = 8; + if (optarg == NULL) + show_usage(); + level = atoi(optarg); + break; + case 's': + if (optarg == NULL) + show_usage(); + bufsize = atoi(optarg); + break; + default: + show_usage(); } - } + } - if (argc > 1) { - goto end; + if (optind < argc) { + show_usage(); } if (cmd == 8) { - n = klogctl(cmd, NULL, level); - if (n < 0) { - goto klogctl_error; - } - exit(TRUE); + if (klogctl(cmd, NULL, level) < 0) + perror_msg_and_die("klogctl"); + return EXIT_SUCCESS; } if (bufsize < 4096) bufsize = 4096; buf = (char *) xmalloc(bufsize); - n = klogctl(cmd, buf, bufsize); - if (n < 0) { - goto klogctl_error; - } + if ((n = klogctl(cmd, buf, bufsize)) < 0) + perror_msg_and_die("klogctl"); lastc = '\n'; for (i = 0; i < n; i++) { - if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { + if (lastc == '\n' && buf[i] == '<') { i++; while (buf[i] >= '0' && buf[i] <= '9') i++; @@ -122,12 +91,5 @@ int dmesg_main(int argc, char **argv) } if (lastc != '\n') putchar('\n'); - exit(TRUE); - end: - usage(dmesg_usage); - exit(FALSE); - klogctl_error: - perror("klogctl"); - exit(FALSE); - + return EXIT_SUCCESS; }