PERFORCE change 126082 for review

Constantine A. Murenin cnst at FreeBSD.org
Tue Sep 4 20:27:50 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=126082

Change 126082 by cnst at dale on 2007/09/05 03:26:48

	factor out some code from sysctl_sensors_handler() into new functions called
	sysctl_handle_sensordev() and sysctl_handle_sensor(), which are modelled after
	kern_sysctl.c::sysctl_handle_string().

Affected files ...

.. //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#11 edit

Differences ...

==== //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#11 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#10 $	*/
+/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.kern/kern_sensors.c#11 $	*/
 /*	$FreeBSD$	*/
 /*	$OpenBSD: kern_sensors.c,v 1.19 2007/06/04 18:42:05 deraadt Exp $	*/
 /*	$OpenBSD: kern_sysctl.c,v 1.154 2007/06/01 17:29:10 beck Exp $	*/
@@ -266,57 +266,48 @@
 /*
  * sysctl glue code
  */
+int sysctl_handle_sensordev(SYSCTL_HANDLER_ARGS);
+int sysctl_handle_sensor(SYSCTL_HANDLER_ARGS);
 int sysctl_sensors_handler(SYSCTL_HANDLER_ARGS);
 
 SYSCTL_NODE(_hw, HW_SENSORS, sensors, CTLFLAG_RD, sysctl_sensors_handler,
     "Hardware Sensors");
 
 int
-sysctl_sensors_handler(SYSCTL_HANDLER_ARGS)
+sysctl_handle_sensordev(SYSCTL_HANDLER_ARGS)
 {
-	int *name = arg1;
-	u_int namelen = arg2;
-	struct ksensor *ks;
-	struct sensor *us;
-	struct ksensordev *ksd;
+	struct ksensordev *ksd = arg1;
 	struct sensordev *usd;
-	int dev, numt, error;
-	enum sensor_type type;
-
-	if (namelen != 1 && namelen != 3)
-		return (ENOTDIR);
+	int error;
 
 	if (req->newptr)
 		return (EPERM);
 
-	dev = name[0];
+	/* Grab a copy, to clear the kernel pointers */
+	usd = malloc(sizeof(*usd), M_TEMP, M_WAITOK);
+	bzero(usd, sizeof(*usd));
+	usd->num = ksd->num;
+	strlcpy(usd->xname, ksd->xname, sizeof(usd->xname));
+	memcpy(usd->maxnumt, ksd->maxnumt, sizeof(usd->maxnumt));
+	usd->sensors_count = ksd->sensors_count;
 
-	ksd = sensordev_get(dev);
-	if (ksd == NULL)
-		return (ENOENT);
+	error = SYSCTL_OUT(req, usd, sizeof(struct sensordev));
 
-	if (namelen == 1) {
-		/* Grab a copy, to clear the kernel pointers */
-		usd = malloc(sizeof(*usd), M_TEMP, M_WAITOK);
-		bzero(usd, sizeof(*usd));
-		usd->num = ksd->num;
-		strlcpy(usd->xname, ksd->xname, sizeof(usd->xname));
-		memcpy(usd->maxnumt, ksd->maxnumt, sizeof(usd->maxnumt));
-		usd->sensors_count = ksd->sensors_count;
+	free(usd, M_TEMP);
+	return (error);
 
-		error = SYSCTL_OUT(req, usd, sizeof(struct sensordev));
+}
 
-		free(usd, M_TEMP);
-		return (error);
-	}
+int
+sysctl_handle_sensor(SYSCTL_HANDLER_ARGS)
+{
+	struct ksensor *ks = arg1;
+	struct sensor *us;
+	int error;
 
-	type = name[1];
-	numt = name[2];
+	if (req->newptr)
+		return (EPERM);
 
-	ks = sensor_find(ksd, type, numt);
-	if (ks == NULL)
-		return (ENOENT);
-
 	/* Grab a copy, to clear the kernel pointers */
 	us = malloc(sizeof(*us), M_TEMP, M_WAITOK);
 	bzero(us, sizeof(*us));
@@ -333,3 +324,35 @@
 	free(us, M_TEMP);
 	return (error);
 }
+
+int
+sysctl_sensors_handler(SYSCTL_HANDLER_ARGS)
+{
+	int *name = arg1;
+	u_int namelen = arg2;
+	struct ksensor *ks;
+	struct ksensordev *ksd;
+	int dev, numt;
+	enum sensor_type type;
+
+	if (namelen != 1 && namelen != 3)
+		return (ENOTDIR);
+
+	dev = name[0];
+
+	ksd = sensordev_get(dev);
+	if (ksd == NULL)
+		return (ENOENT);
+
+	if (namelen == 1)
+		return (sysctl_handle_sensordev(NULL, ksd, 0, req));
+
+	type = name[1];
+	numt = name[2];
+
+	ks = sensor_find(ksd, type, numt);
+	if (ks == NULL)
+		return (ENOENT);
+
+	return (sysctl_handle_sensor(NULL, ks, 0, req));
+}


More information about the p4-projects mailing list