From c1b2cb70039208e37164ab5f32aa76dd18fb4f43 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 25 Jul 2012 21:15:44 +0200 Subject: [PATCH] dmesg: inform user when klogctl() or read_buffer() fails Fix to small regression which made 'dmesg --clear' not to error when running without root privileges. Same happen with '-D' and few other options as well. Signed-off-by: Sami Kerola --- sys-utils/dmesg.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c index c4d1f9f38e..a3d95f1b77 100644 --- a/sys-utils/dmesg.c +++ b/sys-utils/dmesg.c @@ -985,7 +985,7 @@ static int read_kmsg(struct dmesg_control *ctl) int main(int argc, char *argv[]) { char *buf = NULL; - ssize_t n; + ssize_t n, r; int c; int console_level = 0; static struct dmesg_control ctl = { @@ -1128,6 +1128,7 @@ int main(int argc, char *argv[]) argc -= optind; argv += optind; n = 0; + r = 0; if (argc > 1) usage(stderr); @@ -1148,9 +1149,9 @@ int main(int argc, char *argv[]) if (ctl.method == DMESG_METHOD_KMSG && init_kmsg(&ctl) != 0) ctl.method = DMESG_METHOD_SYSLOG; - n = read_buffer(&ctl, &buf); - if (n > 0) - print_buffer(&ctl, buf, n); + r = read_buffer(&ctl, &buf); + if (r > 0) + print_buffer(&ctl, buf, r); if (!ctl.mmap_buff) free(buf); break; @@ -1170,8 +1171,10 @@ int main(int argc, char *argv[]) if (ctl.kmsg >= 0) close(ctl.kmsg); - if (n < 0 && ctl.method == DMESG_METHOD_SYSLOG) + if (n < 0) err(EXIT_FAILURE, _("klogctl failed")); + if (r < 0) + err(EXIT_FAILURE, _("read_buffer failed")); return EXIT_SUCCESS; } -- 2.47.3