Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 May 2002 12:58:34 -0700
From:      Alfred Perlstein <bright@mu.org>
To:        hackers@freebsd.org
Subject:   sysctl patch
Message-ID:  <20020520195834.GA54960@elvis.mu.org>

next in thread | raw e-mail | index | archive | help
If sysctl attempts to decode various structures that have changed
size it exits without trying to finish parsing the tree...

I'm not sure I like the following patch, but without anything better
I think it should go in...


Index: sysctl.c
===================================================================
RCS file: /home/ncvs/src/sbin/sysctl/sysctl.c,v
retrieving revision 1.45
diff -u -r1.45 sysctl.c
--- sysctl.c	8 May 2002 23:49:19 -0000	1.45
+++ sysctl.c	20 May 2002 19:56:15 -0000
@@ -275,8 +275,10 @@
 S_clockinfo(int l2, void *p)
 {
 	struct clockinfo *ci = (struct clockinfo*)p;
-	if (l2 != sizeof(*ci))
-		err(1, "S_clockinfo %d != %d", l2, sizeof(*ci));
+	if (l2 != sizeof(*ci)) {
+		warnx("S_clockinfo %d != %d", l2, sizeof(*ci));
+		return (0);
+	}
 	printf("{ hz = %d, tick = %d, profhz = %d, stathz = %d }",
 		ci->hz, ci->tick, ci->profhz, ci->stathz);
 	return (0);
@@ -287,9 +289,10 @@
 {
 	struct loadavg *tv = (struct loadavg*)p;
 
-	if (l2 != sizeof(*tv))
-		err(1, "S_loadavg %d != %d", l2, sizeof(*tv));
-
+	if (l2 != sizeof(*tv)) {
+		warnx("S_loadavg %d != %d", l2, sizeof(*tv));
+		return (0);
+	}
 	printf("{ %.2f %.2f %.2f }",
 		(double)tv->ldavg[0]/(double)tv->fscale,
 		(double)tv->ldavg[1]/(double)tv->fscale,
@@ -304,8 +307,10 @@
 	time_t tv_sec;
 	char *p1, *p2;
 
-	if (l2 != sizeof(*tv))
-		err(1, "S_timeval %d != %d", l2, sizeof(*tv));
+	if (l2 != sizeof(*tv)) {
+		warnx("S_timeval %d != %d", l2, sizeof(*tv));
+		return (0);
+	}
 	printf("{ sec = %ld, usec = %ld } ",
 		tv->tv_sec, tv->tv_usec);
 	tv_sec = tv->tv_sec;
@@ -321,8 +326,10 @@
 T_dev_t(int l2, void *p)
 {
 	dev_t *d = (dev_t *)p;
-	if (l2 != sizeof(*d))
-		err(1, "T_dev_T %d != %d", l2, sizeof(*d));
+	if (l2 != sizeof(*d)) {
+		warnx("T_dev_T %d != %d", l2, sizeof(*d));
+		return (0);
+	}
 	if ((int)(*d) != -1) {
 		if (minor(*d) > 255 || minor(*d) < 0)
 			printf("{ major = %d, minor = 0x%x }",


-- 
-Alfred Perlstein [alfred@freebsd.org]
'Instead of asking why a piece of software is using "1970s technology,"
 start asking why software is ignoring 30 years of accumulated wisdom.'
Tax deductible donations for FreeBSD: http://www.freebsdfoundation.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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