summaryrefslogtreecommitdiffstats
path: root/sys-utils
diff options
context:
space:
mode:
authorKarel Zak2011-07-01 13:24:04 +0200
committerKarel Zak2011-07-01 13:36:11 +0200
commit4a3b794968ae5b327f4a62a85afedd3b86a9373d (patch)
tree3a04923394b339cf808ce0a327c1dab42f912e40 /sys-utils
parentlibblkid: add docs for new PART_ENTRY_* values (diff)
downloadkernel-qcow2-util-linux-4a3b794968ae5b327f4a62a85afedd3b86a9373d.tar.gz
kernel-qcow2-util-linux-4a3b794968ae5b327f4a62a85afedd3b86a9373d.tar.xz
kernel-qcow2-util-linux-4a3b794968ae5b327f4a62a85afedd3b86a9373d.zip
dmesg: add long options, --help and --version
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils')
-rw-r--r--sys-utils/dmesg.142
-rw-r--r--sys-utils/dmesg.c44
2 files changed, 52 insertions, 34 deletions
diff --git a/sys-utils/dmesg.1 b/sys-utils/dmesg.1
index d7af1dad1..c56bc9e57 100644
--- a/sys-utils/dmesg.1
+++ b/sys-utils/dmesg.1
@@ -5,12 +5,7 @@
dmesg \- print or control the kernel ring buffer
.SH SYNOPSIS
.B dmesg
-.RB [ \-c ]
-.RB [ \-r ]
-.RB [ \-n
-.IR level ]
-.RB [ \-s
-.IR bufsize ]
+.RB [ options ]
.SH DESCRIPTION
.B dmesg
is used to examine or control the kernel ring buffer.
@@ -24,23 +19,11 @@ and mail the
.I boot.messages
file to whoever can debug their problem.
.SH OPTIONS
-.TP
-.B \-c
+.IP "\fB\-c, \-\-read-clear\fP"
Clear the ring buffer contents after printing.
-.TP
-.B \-r
-Print the raw message buffer, i.e., don't strip the log level prefixes.
-.TP
-.BI \-s " bufsize"
-Use a buffer of size
-.I bufsize
-to query the kernel ring buffer. This is 16392 by default.
-(The default kernel syslog buffer size was 4096
-at first, 8192 since 1.3.54, 16384 since 2.1.113.)
-If you have set the kernel buffer to be larger than the default
-then this option can be used to view the entire buffer.
-.TP
-.BI \-n " level"
+.IP "\fB\-h, \-\-help\fP"
+Print a help text and exit.
+.IP "\fB\-n, \-\-console-level \fIlevel\fP
Set the
.I level
at which logging of messages is done to the console. For example,
@@ -58,9 +41,18 @@ option is used,
will
.I not
print or clear the kernel ring buffer.
-
-When both options are used, only the last option on the command line will
-have an effect.
+.IP "\fB\-r, \-\-raw\fP"
+Print the raw message buffer, i.e., don't strip the log level prefixes.
+.IP "\fB\-s, \-\-buffer-size \fIsize\fP
+Use a buffer of
+.I size
+to query the kernel ring buffer. This is 16392 by default.
+(The default kernel syslog buffer size was 4096
+at first, 8192 since 1.3.54, 16384 since 2.1.113.)
+If you have set the kernel buffer to be larger than the default
+then this option can be used to view the entire buffer.
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
.SH SEE ALSO
.BR syslogd (8)
.\" .SH AUTHOR
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c
index c3e5659c1..3d550998a 100644
--- a/sys-utils/dmesg.c
+++ b/sys-utils/dmesg.c
@@ -41,13 +41,22 @@
#include "strutils.h"
#include "xalloc.h"
-static void __attribute__ ((noreturn)) usage(void)
+static void __attribute__((__noreturn__)) usage(FILE *out)
{
- fprintf(stderr,
- _("Usage: %s [-c] [-n level] [-r] [-s bufsize]\n"),
- program_invocation_short_name);
- exit(EXIT_FAILURE);
-
+ fprintf(out, _(
+ "\nUsage:\n"
+ " %s [options]\n"), program_invocation_short_name);
+
+ fprintf(out, _(
+ "\nOptions:\n"
+ " -c, --read-clear read and clear all messages\n"
+ " -r, --raw print the raw message buffer\n"
+ " -s, --buffer-size=SIZE buffer size to query the kernel ring buffer\n"
+ " -n, --console-level=LEVEL set level of messages printed to console\n"
+ " -V, --version output version information and exit\n"
+ " -h, --help display this help and exit\n\n"));
+
+ exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
}
int main(int argc, char *argv[])
@@ -63,11 +72,21 @@ int main(int argc, char *argv[])
int cmd = 3; /* Read all messages in the ring buffer */
int raw = 0;
+ static const struct option longopts[] = {
+ { "read-clear", no_argument, NULL, 'c' },
+ { "raw", no_argument, NULL, 'r' },
+ { "buffer-size", required_argument, NULL, 's' },
+ { "console-level", required_argument, NULL, 'n' },
+ { "version", no_argument, NULL, 'V' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
- while ((c = getopt(argc, argv, "crn:s:")) != -1) {
+ while ((c = getopt_long(argc, argv, "chrn:s:V", longopts, NULL)) != -1) {
switch (c) {
case 'c':
cmd = 4; /* Read and clear all messages */
@@ -84,16 +103,23 @@ int main(int argc, char *argv[])
if (bufsize < 4096)
bufsize = 4096;
break;
+ case 'V':
+ printf(_("%s from %s\n"), program_invocation_short_name,
+ PACKAGE_STRING);
+ return EXIT_SUCCESS;
+ case 'h':
+ usage(stdout);
+ break;
case '?':
default:
- usage();
+ usage(stderr);
}
}
argc -= optind;
argv += optind;
if (argc > 1)
- usage();
+ usage(stderr);
if (cmd == 8) {
n = klogctl(cmd, NULL, level);