From 3a9241add947cb6d24b5de7a8927517426a78795 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sat, 25 Aug 2012 14:25:22 -0500 Subject: Move commands into "posix", "lsb", and "other" menus/directories. --- toys/lsb/dmesg.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 toys/lsb/dmesg.c (limited to 'toys/lsb/dmesg.c') diff --git a/toys/lsb/dmesg.c b/toys/lsb/dmesg.c new file mode 100644 index 00000000..95b023d6 --- /dev/null +++ b/toys/lsb/dmesg.c @@ -0,0 +1,59 @@ +/* vi: set sw=4 ts=4: + * + * dmesg.c - display/control kernel ring buffer. + * + * Copyright 2006, 2007 Rob Landley + * + * Not in SUSv3. + +USE_DMESG(NEWTOY(dmesg, "s#n#c", TOYFLAG_BIN)) + +config DMESG + bool "dmesg" + default y + help + usage: dmesg [-n level] [-s bufsize] | -c + + Print or control the kernel ring buffer. + + -n Set kernel logging level (1-9). + -s Size of buffer to read (in bytes), default 16384. + -c Clear the ring buffer after printing. +*/ + +#include "toys.h" +#include + +DEFINE_GLOBALS( + long level; + long size; +) + +#define TT this.dmesg + +void dmesg_main(void) +{ + // For -n just tell kernel to which messages to keep. + if (toys.optflags & 2) { + if (klogctl(8, NULL, TT.level)) + error_exit("klogctl"); + } else { + int size, i, last = '\n'; + char *data; + + // Figure out how much data we need, and fetch it. + size = TT.size; + if (size<2) size = 16384; + data = xmalloc(size); + size = klogctl(3 + (toys.optflags&1), data, size); + if (size < 0) error_exit("klogctl"); + + // Display data, filtering out level markers. + for (i=0; i