summaryrefslogtreecommitdiffstats
path: root/sys-utils/dmesg.c
diff options
context:
space:
mode:
authorKarel Zak2011-07-01 13:57:36 +0200
committerKarel Zak2011-07-01 13:57:36 +0200
commitf4fa5b44df8d2ad12175f3fe2b98f9839e841a7b (patch)
treede43a7bc1c54acafeb0b92e50d14a3e644f7fac6 /sys-utils/dmesg.c
parentdmesg: refactoring - cleanup get bufsize code (diff)
downloadkernel-qcow2-util-linux-f4fa5b44df8d2ad12175f3fe2b98f9839e841a7b.tar.gz
kernel-qcow2-util-linux-f4fa5b44df8d2ad12175f3fe2b98f9839e841a7b.tar.xz
kernel-qcow2-util-linux-f4fa5b44df8d2ad12175f3fe2b98f9839e841a7b.zip
dmesg: refactoring - cleanup print buffer code
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/dmesg.c')
-rw-r--r--sys-utils/dmesg.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c
index 3b72cfaf8..e4a8cffa3 100644
--- a/sys-utils/dmesg.c
+++ b/sys-utils/dmesg.c
@@ -46,6 +46,9 @@
/* Return size of the log buffer */
#define SYSLOG_ACTION_SIZE_BUFFER 10
+/* dmesg flags */
+#define DMESG_FL_RAW (1 << 1)
+
static void __attribute__((__noreturn__)) usage(FILE *out)
{
fprintf(out, _(
@@ -71,18 +74,37 @@ static int get_buffer_size()
return n > 0 ? n : 0;
}
+static void print_buffer(const char *buf, size_t size, int flags)
+{
+ int lastc = '\n';
+ int i;
+
+ for (i = 0; i < size; i++) {
+ if (!(flags & DMESG_FL_RAW) &&
+ (i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
+ i++;
+ while (isdigit(buf[i]))
+ i++;
+ if (buf[i] == '>')
+ i++;
+ }
+ lastc = buf[i];
+ putchar(lastc);
+ }
+ if (lastc != '\n')
+ putchar('\n');
+}
+
int main(int argc, char *argv[])
{
char *buf = NULL;
int sz;
int bufsize = 0;
- int i;
int n;
int c;
int level = 0;
- int lastc;
int cmd = SYSLOG_ACTION_READ_ALL;
- int raw = 0;
+ int flags = 0;
static const struct option longopts[] = {
{ "read-clear", no_argument, NULL, 'c' },
@@ -108,7 +130,7 @@ int main(int argc, char *argv[])
level = strtol_or_err(optarg, _("failed to parse level"));
break;
case 'r':
- raw = 1;
+ flags |= DMESG_FL_RAW;
break;
case 's':
bufsize = strtol_or_err(optarg, _("failed to parse buffer size"));
@@ -166,20 +188,8 @@ int main(int argc, char *argv[])
if (n < 0)
err(EXIT_FAILURE, _("klogctl failed"));
- lastc = '\n';
- for (i = 0; i < n; i++) {
- if (!raw && (i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
- i++;
- while (isdigit(buf[i]))
- i++;
- if (buf[i] == '>')
- i++;
- }
- lastc = buf[i];
- putchar(lastc);
- }
- if (lastc != '\n')
- putchar('\n');
+ print_buffer(buf, n, flags);
+
free(buf);
return EXIT_SUCCESS;