svn commit: r280012 - head/sys/kern

Ian Lepore ian at FreeBSD.org
Sat Mar 14 23:16:14 UTC 2015


Author: ian
Date: Sat Mar 14 23:16:12 2015
New Revision: 280012
URL: https://svnweb.freebsd.org/changeset/base/280012

Log:
  Use sbuf_printf() for sysctl strings instead of stack buffers and snprintf().

Modified:
  head/sys/kern/kern_et.c
  head/sys/kern/kern_tc.c

Modified: head/sys/kern/kern_et.c
==============================================================================
--- head/sys/kern/kern_et.c	Sat Mar 14 22:32:15 2015	(r280011)
+++ head/sys/kern/kern_et.c	Sat Mar 14 23:16:12 2015	(r280012)
@@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
+#include <sys/sbuf.h>
 #include <sys/sysctl.h>
 #include <sys/systm.h>
 #include <sys/queue.h>
@@ -238,22 +239,24 @@ et_free(struct eventtimer *et)
 static int
 sysctl_kern_eventtimer_choice(SYSCTL_HANDLER_ARGS)
 {
-	char buf[512], *spc;
+	struct sbuf sb;
 	struct eventtimer *et;
-	int error, off;
+	int error;
+
+	if ((error = sysctl_wire_old_buffer(req, 0)) != 0)
+		return (error);
+	sbuf_new_for_sysctl(&sb, NULL, 0, req);
 
-	spc = "";
-	error = 0;
-	buf[0] = 0;
-	off = 0;
 	ET_LOCK();
 	SLIST_FOREACH(et, &eventtimers, et_all) {
-		off += snprintf(buf + off, sizeof(buf) - off, "%s%s(%d)",
-		    spc, et->et_name, et->et_quality);
-		spc = " ";
+		if (et != SLIST_FIRST(&eventtimers))
+			sbuf_putc(&sb, ' ');
+		sbuf_printf(&sb, "%s(%d)", et->et_name, et->et_quality);
 	}
 	ET_UNLOCK();
-	error = SYSCTL_OUT(req, buf, strlen(buf));
+
+	error = sbuf_finish(&sb);
+	sbuf_delete(&sb);
 	return (error);
 }
 SYSCTL_PROC(_kern_eventtimer, OID_AUTO, choice,

Modified: head/sys/kern/kern_tc.c
==============================================================================
--- head/sys/kern/kern_tc.c	Sat Mar 14 22:32:15 2015	(r280011)
+++ head/sys/kern/kern_tc.c	Sat Mar 14 23:16:12 2015	(r280012)
@@ -25,6 +25,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/limits.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
+#include <sys/sbuf.h>
 #include <sys/sysctl.h>
 #include <sys/syslog.h>
 #include <sys/systm.h>
@@ -1445,18 +1446,18 @@ SYSCTL_PROC(_kern_timecounter, OID_AUTO,
 static int
 sysctl_kern_timecounter_choice(SYSCTL_HANDLER_ARGS)
 {
-	char buf[32], *spc;
+	struct sbuf sb;
 	struct timecounter *tc;
 	int error;
 
-	spc = "";
-	error = 0;
-	for (tc = timecounters; error == 0 && tc != NULL; tc = tc->tc_next) {
-		sprintf(buf, "%s%s(%d)",
-		    spc, tc->tc_name, tc->tc_quality);
-		error = SYSCTL_OUT(req, buf, strlen(buf));
-		spc = " ";
+	sbuf_new_for_sysctl(&sb, NULL, 0, req);
+	for (tc = timecounters; tc != NULL; tc = tc->tc_next) {
+		if (tc != timecounters)
+			sbuf_putc(&sb, ' ');
+		sbuf_printf(&sb, "%s(%d)", tc->tc_name, tc->tc_quality);
 	}
+	error = sbuf_finish(&sb);
+	sbuf_delete(&sb);
 	return (error);
 }
 


More information about the svn-src-head mailing list