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>
This commit is contained in:
Sami Kerola 2012-07-25 21:15:44 +02:00 committed by Karel Zak
parent 7560aebe7e
commit c1b2cb7003
1 changed files with 8 additions and 5 deletions

View File

@ -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;
}