Module Name:    src
Committed By:   pooka
Date:           Fri Mar 19 16:25:33 UTC 2010

Modified Files:
        src/sbin/modstat: main.c

Log Message:
Avoid known unknown if the kernel presents us with an unknown
unknown for module class and/or source.

related to PR kern/43014


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sbin/modstat/main.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/modstat/main.c
diff -u src/sbin/modstat/main.c:1.9 src/sbin/modstat/main.c:1.10
--- src/sbin/modstat/main.c:1.9	Fri Mar  5 10:27:16 2010
+++ src/sbin/modstat/main.c	Fri Mar 19 16:25:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.9 2010/03/05 10:27:16 pooka Exp $	*/
+/*	$NetBSD: main.c,v 1.10 2010/03/19 16:25:33 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: main.c,v 1.9 2010/03/05 10:27:16 pooka Exp $");
+__RCSID("$NetBSD: main.c,v 1.10 2010/03/19 16:25:33 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/module.h>
@@ -51,12 +51,14 @@
 	"exec",
 	"secmodel",
 };
+const unsigned int class_max = __arraycount(classes);
 
 static const char *sources[] = {
 	"builtin",
 	"boot",
 	"filesys",
 };
+const unsigned int source_max = __arraycount(sources);
 
 int
 main(int argc, char **argv)
@@ -104,6 +106,9 @@
 	len = iov.iov_len / sizeof(modstat_t);
 	qsort(iov.iov_base, len, sizeof(modstat_t), modstatcmp);
 	for (ms = iov.iov_base; len != 0; ms++, len--) {
+		const char *class;
+		const char *source;
+
 		if (name != NULL && strcmp(ms->ms_name, name) != 0) {
 			continue;
 		}
@@ -117,9 +122,18 @@
 		} else {
 			snprintf(sbuf, sizeof(sbuf), "%u", ms->ms_size);
 		}
+		if (ms->ms_class <= class_max)
+			class = classes[ms->ms_class];
+		else
+			class = "UNKNOWN";
+		if (ms->ms_source < source_max)
+			source = sources[ms->ms_source];
+		else
+			source = "UNKNOWN";
+
 		printf("%-16s %-10s %-10s %-5d %-8s %s\n",
-		    ms->ms_name, classes[ms->ms_class], sources[ms->ms_source],
-		    ms->ms_refcnt, sbuf, ms->ms_required);
+		    ms->ms_name, class, source, ms->ms_refcnt, sbuf,
+		    ms->ms_required);
 	}
 
 	exit(EXIT_SUCCESS);
@@ -143,4 +157,3 @@
 
 	return strcmp(msa->ms_name, msb->ms_name);
 }
-

Reply via email to