Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Jul 2007 02:21:42 GMT
From:      "Constantine A. Murenin" <cnst@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 124243 for review
Message-ID:  <200707280221.l6S2LgnM009644@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=124243

Change 124243 by cnst@dale on 2007/07/28 02:20:40

	reinitialise size_t *oldlenp parameter to sysctl(3), 
	because it can be changed by sysctl(3) sometimes.
	
	This gets rid of the following problems on FreeBSD:
		sensorsd: sysctl: Cannot allocate memory
	
	(FreeBSD must have something different here than OpenBSD?)

Affected files ...

.. //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#3 edit

Differences ...

==== //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#2 $ */
+/*	$P4: //depot/projects/soc2007/cnst-sensors/usr.sbin.sensorsd/sensorsd.c#3 $ */
 /*	$FreeBSD$ */
 /*	$OpenBSD: sensorsd.c,v 1.33 2007/06/01 22:41:12 cnst Exp $ */
 
@@ -110,7 +110,7 @@
 {
 	struct sensordev sensordev;
 	struct sdlim_t	*sdlim;
-	size_t		 sdlen = sizeof(sensordev);
+	size_t		 sdlen;
 	time_t		 next_report, last_report = 0, next_check;
 	int		 mib[3], dev;
 	int		 sleeptime, sensor_cnt = 0, ch;
@@ -130,6 +130,7 @@
 
 	for (dev = 0; dev < MAXSENSORDEVICES; dev++) {
 		mib[2] = dev;
+		sdlen = sizeof(sensordev);
 		if (sysctl(mib, 3, &sensordev, &sdlen, NULL, 0) == -1) {
 			if (errno != ENOENT)
 				warn("sysctl");
@@ -190,7 +191,7 @@
 	struct sensor	 sensor;
 	struct sdlim_t	*sdlim;
 	struct limits_t	*limit;
-	size_t		 slen = sizeof(sensor);
+	size_t		 slen;
 	int		 mib[5], numt;
 	enum sensor_type type;
 
@@ -209,6 +210,7 @@
 		mib[3] = type;
 		for (numt = 0; numt < snsrdev->maxnumt[type]; numt++) {
 			mib[4] = numt;
+			slen = sizeof(sensor);
 			if (sysctl(mib, 5, &sensor, &slen, NULL, 0) == -1) {
 				if (errno != ENOENT)
 					warn("sysctl");
@@ -247,7 +249,6 @@
 	mib[0] = CTL_HW;
 	mib[1] = HW_SENSORS;
 	mib[2] = sdlim->dev;
-	len = sizeof(sensor);
 
 	TAILQ_FOREACH(limit, &sdlim->limits, entries) {
 		if ((limit->flags & SENSORSD_L_ISTATUS) &&
@@ -256,6 +257,7 @@
 
 		mib[3] = limit->type;
 		mib[4] = limit->numt;
+		len = sizeof(sensor);
 		if (sysctl(mib, 5, &sensor, &len, NULL, 0) == -1)
 			err(1, "sysctl");
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707280221.l6S2LgnM009644>