diff options
author | Sami Kerola | 2012-07-25 21:15:44 +0200 |
---|---|---|
committer | Karel Zak | 2012-07-26 13:51:44 +0200 |
commit | c1b2cb70039208e37164ab5f32aa76dd18fb4f43 (patch) | |
tree | caaa03fe4eeef54d915ee3fafc9326efb6574e02 /sys-utils/dmesg.c | |
parent | wdctl: fix conflicting types on old systems (diff) | |
download | kernel-qcow2-util-linux-c1b2cb70039208e37164ab5f32aa76dd18fb4f43.tar.gz kernel-qcow2-util-linux-c1b2cb70039208e37164ab5f32aa76dd18fb4f43.tar.xz kernel-qcow2-util-linux-c1b2cb70039208e37164ab5f32aa76dd18fb4f43.zip |
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 <kerolasa@iki.fi>
Diffstat (limited to 'sys-utils/dmesg.c')
-rw-r--r-- | sys-utils/dmesg.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c index c4d1f9f38..a3d95f1b7 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; } |