diff options
author | ian <ian@FreeBSD.org> | 2015-03-16 21:09:11 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2015-03-16 21:09:11 +0000 |
commit | 44429c482c740a1eecff9a3526ff7a9844e970da (patch) | |
tree | 9e1d243dc50486128e14b93176777a214dda56cd /sbin/dmesg | |
parent | 8afab6ffc306374d2b05617aafd2dd168ab340e6 (diff) | |
download | FreeBSD-src-44429c482c740a1eecff9a3526ff7a9844e970da.zip FreeBSD-src-44429c482c740a1eecff9a3526ff7a9844e970da.tar.gz |
Fix minor fallout from sysctl strings being nulterminated now. The dmesg
code can read the buffer via sysctl or from a core file. In the core file
case there will be no nulterm, and the code copes with that, but now in the
sysctl case there is a nulterm (there didn't used to be). The least
disruptive way to restore the old behavior (and eliminate a spurious '\000'
at the end of the output) is to remove the nulterm (by decrementing the
buffer length) in the sysctl case.
Diffstat (limited to 'sbin/dmesg')
-rw-r--r-- | sbin/dmesg/dmesg.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sbin/dmesg/dmesg.c b/sbin/dmesg/dmesg.c index f0fcb81..9fee416 100644 --- a/sbin/dmesg/dmesg.c +++ b/sbin/dmesg/dmesg.c @@ -111,8 +111,10 @@ main(int argc, char *argv[]) if (memf == NULL) { /* - * Running kernel. Use sysctl. This gives an unwrapped - * buffer as a side effect. + * Running kernel. Use sysctl. This gives an unwrapped buffer + * as a side effect. Remove nulterm (if present) so the value + * returned by sysctl is formatted as the rest of the code + * expects (the same as the value read from a core file below). */ if (sysctlbyname("kern.msgbuf", NULL, &buflen, NULL, 0) == -1) err(1, "sysctl kern.msgbuf"); @@ -120,6 +122,8 @@ main(int argc, char *argv[]) errx(1, "malloc failed"); if (sysctlbyname("kern.msgbuf", bp, &buflen, NULL, 0) == -1) err(1, "sysctl kern.msgbuf"); + if (buflen > 0 && bp[buflen - 1] == '\0') + buflen--; if (clear) if (sysctlbyname("kern.msgbuf_clear", NULL, NULL, &clear, sizeof(int))) err(1, "sysctl kern.msgbuf_clear"); |