diff options
author | root <root@rshg054.dnsready.net> | 2011-09-10 23:14:36 +0000 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2011-09-10 23:14:36 +0000 |
commit | 1dc1efa50ce9926a6ed832bda2ebe3319485ac09 (patch) | |
tree | 25b059dc89bbd5f44377c1df6f612cf6556a6076 /testing/util-linux/dmesg-non-printk.patch | |
parent | 42db4a0cf3a829fcd1bc2150669c6aa3c2984815 (diff) |
Sat Sep 10 23:14:36 UTC 2011
Diffstat (limited to 'testing/util-linux/dmesg-non-printk.patch')
-rw-r--r-- | testing/util-linux/dmesg-non-printk.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/testing/util-linux/dmesg-non-printk.patch b/testing/util-linux/dmesg-non-printk.patch new file mode 100644 index 000000000..ea2354420 --- /dev/null +++ b/testing/util-linux/dmesg-non-printk.patch @@ -0,0 +1,69 @@ +From 22f69825778f992ff98ed100252bf5e00a15d9d1 Mon Sep 17 00:00:00 2001 +From: Karel Zak <kzak@redhat.com> +Date: Wed, 31 Aug 2011 12:28:39 +0200 +Subject: [PATCH] dmesg: fix for non-CONFIG_PRINTK_TIME kernels + + * dmesg(1) incorrectly assumes that lines like "<6>\n" + are broken. + + * it's more robust to assume the end of the record is "\n<" + + * print \n for empty lines + +Reported-by: "Gabor Z. Papp" <gzp@papp.hu> +Signed-off-by: Karel Zak <kzak@redhat.com> +--- + sys-utils/dmesg.c | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c +index 6090f4e..8e7bb4b 100644 +--- a/sys-utils/dmesg.c ++++ b/sys-utils/dmesg.c +@@ -442,12 +442,12 @@ static int get_next_record(struct dmesg_control *ctl, struct dmesg_record *rec) + + if (!begin) + begin = p; +- if (*p == '\n') +- end = p; + if (i + 1 == rec->next_size) { + end = p + 1; + i++; +- } ++ } else if (*p == '\n' && *(p + 1) == '<') ++ end = p; ++ + if (begin && !*begin) + begin = NULL; /* zero(s) at the end of the buffer? */ + if (!begin || !end) +@@ -469,9 +469,6 @@ static int get_next_record(struct dmesg_control *ctl, struct dmesg_record *rec) + } + } + +- if (end <= begin) +- return -1; /* error */ +- + if (*begin == '[' && (*(begin + 1) == ' ' || + isdigit(*(begin + 1)))) { + if (ctl->delta || ctl->ctime) { +@@ -534,12 +531,15 @@ static void print_buffer(const char *buf, size_t size, + } + + while (get_next_record(ctl, &rec) == 0) { +- if (!rec.mesg_size) +- continue; + + if (!accept_record(ctl, &rec)) + continue; + ++ if (!rec.mesg_size) { ++ putchar('\n'); ++ continue; ++ } ++ + if (ctl->decode && rec.level >= 0 && rec.facility >= 0) + printf("%-6s:%-6s: ", facility_names[rec.facility].name, + level_names[rec.level].name); +-- +1.7.6.1 + |