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