Fixed a misspelling of 0 as NULL.

Fixed a nearby bug.  The "play it safe" code in dosysctl() was unsafe
because it overran the buffer by 1 if sysctl() filled all of the buffer.

Fixed a nearby style bug in output.  Not just 1, but 2 extra newlines
were printed at the end by "vmstat -m" and "vmstat -z".  Don't print
any newlines explicitly.  This depends on 2 of the many formatting
bugs in the corresponding sysctls.  First, the sysctls return an extra
newline at the end of the strings.  This also messes up output from
sysctl(8).  Second, the sysctls return an extra newline at the beginning
of the strings.  This is good for separating the 2 tables output by
"vmstat -mz" and for starting the header on a new line in plain sysctl
output, but gives a bogus extra newline at the beginning for "vm -[m | z]"
and "sysctl -n [kern.malloc | vm.zone]".

Fixed some nearby style bugs in the source code:
- the same line that misspelled 0 as NULL also spelled NULL as 0.
- the size was doubled twice in the realloc loop.
- the "play it safe" comment was misleading.  Terminating the buffer
  is bogus because dosysctl() is only meant to work with sysctls that
  return strings and the terminator is part of a string.  However, the
  kern.malloc sysctl has more than style bugs.  It also doesn't return
  a string.  Termination is needed to work around this bug.
This commit is contained in:
Bruce Evans 2004-03-11 11:30:57 +00:00
parent 55cc37447a
commit c044589554
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=126842

View File

@ -916,12 +916,12 @@ dosysctl(const char *name)
for (buf = NULL, bufsize = 1024; ; bufsize *= 2) {
if ((buf = realloc(buf, bufsize)) == NULL)
err(1, "realloc()");
if (mysysctl(name, buf, &bufsize, 0, NULL) == 0)
bufsize--; /* Leave space for the kern.malloc fixup. */
if (mysysctl(name, buf, &bufsize, NULL, 0) == 0)
break;
bufsize *= 2;
}
buf[bufsize] = '\0'; /* play it safe */
(void)printf("%s\n\n", buf);
buf[bufsize] = '\0'; /* Fix up kern.malloc not returning a string. */
(void)printf("%s", buf);
free(buf);
}