svn commit: r280156 - head/sbin/dmesg
Ian Lepore
ian at FreeBSD.org
Mon Mar 16 21:09:12 UTC 2015
Author: ian
Date: Mon Mar 16 21:09:11 2015
New Revision: 280156
URL: https://svnweb.freebsd.org/changeset/base/280156
Log:
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.
Modified:
head/sbin/dmesg/dmesg.c
Modified: head/sbin/dmesg/dmesg.c
==============================================================================
--- head/sbin/dmesg/dmesg.c Mon Mar 16 20:24:37 2015 (r280155)
+++ head/sbin/dmesg/dmesg.c Mon Mar 16 21:09:11 2015 (r280156)
@@ -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");
More information about the svn-src-all
mailing list