Module Name:    src
Committed By:   christos
Date:           Mon Nov 10 21:13:04 UTC 2014

Modified Files:
        src/usr.bin/config: mkdevsw.c

Log Message:
merge a bit of duplicated code.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/usr.bin/config/mkdevsw.c

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

Modified files:

Index: src/usr.bin/config/mkdevsw.c
diff -u src/usr.bin/config/mkdevsw.c:1.11 src/usr.bin/config/mkdevsw.c:1.12
--- src/usr.bin/config/mkdevsw.c:1.11	Wed Oct 29 13:14:50 2014
+++ src/usr.bin/config/mkdevsw.c	Mon Nov 10 16:13:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mkdevsw.c,v 1.11 2014/10/29 17:14:50 christos Exp $	*/
+/*	$NetBSD: mkdevsw.c,v 1.12 2014/11/10 21:13:04 christos Exp $	*/
 
 /*
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: mkdevsw.c,v 1.11 2014/10/29 17:14:50 christos Exp $");
+__RCSID("$NetBSD: mkdevsw.c,v 1.12 2014/11/10 21:13:04 christos Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -89,37 +89,54 @@ emitheader(FILE *fp)
 		  "#include <sys/conf.h>\n", fp);
 }
 
+static void
+dentry(FILE *fp, struct hashtab *t, devmajor_t i, char p)
+{
+	const struct devm *dm;
+	char mstr[16];
+
+	(void)snprintf(mstr, sizeof(mstr), "%d", i);
+	if ((dm = ht_lookup(t, intern(mstr))) == NULL)
+		return;
+
+	fprintf(fp, "extern const struct %cdevsw %s_%cdevsw;\n",
+	    p, dm->dm_name, p);
+}
+
+static void
+pentry(FILE *fp, struct hashtab *t, devmajor_t i, char p)
+{
+	const struct devm *dm;
+	char mstr[16];
+
+	(void)snprintf(mstr, sizeof(mstr), "%d", i);
+	dm = ht_lookup(t, intern(mstr));
+
+	if (dm)
+		fprintf(fp, "\t&%s_%cdevsw", dm->dm_name, p); 
+	else
+		fputs("\tNULL", fp);
+
+	fprintf(fp, ",\t// %3d\n", i);
+}
+
 /*
  * Emit device switch table for character/block device.
  */
 static void
 emitdevm(FILE *fp)
 {
-	struct devm *dm;
-	char mstr[16];
 	devmajor_t i;
 
 	fputs("\n/* device switch table for block device */\n", fp);
 
-	for (i = 0 ; i <= maxbdevm ; i++) {
-		(void)snprintf(mstr, sizeof(mstr), "%d", i);
-		if ((dm = ht_lookup(bdevmtab, intern(mstr))) == NULL)
-			continue;
-
-		fprintf(fp, "extern const struct bdevsw %s_bdevsw;\n",
-			    dm->dm_name);
-	}
+	for (i = 0; i <= maxbdevm ; i++)
+		dentry(fp, cdevmtab, i, 'b');
 
 	fputs("\nconst struct bdevsw *bdevsw0[] = {\n", fp);
 
-	for (i = 0 ; i <= maxbdevm ; i++) {
-		(void)snprintf(mstr, sizeof(mstr), "%d", i);
-		if ((dm = ht_lookup(bdevmtab, intern(mstr))) == NULL) {
-			fprintf(fp, "\tNULL,\n");
-		} else {
-			fprintf(fp, "\t&%s_bdevsw,\n", dm->dm_name);
-		}
-	}
+	for (i = 0; i <= maxbdevm; i++)
+		pentry(fp, bdevmtab, i, 'b');
 
 	fputs("};\n\nconst struct bdevsw **bdevsw = bdevsw0;\n", fp);
 
@@ -128,25 +145,13 @@ emitdevm(FILE *fp)
 
 	fputs("\n/* device switch table for character device */\n", fp);
 
-	for (i = 0 ; i <= maxcdevm ; i++) {
-		(void)snprintf(mstr, sizeof(mstr), "%d", i);
-		if ((dm = ht_lookup(cdevmtab, intern(mstr))) == NULL)
-			continue;
-
-		fprintf(fp, "extern const struct cdevsw %s_cdevsw;\n",
-			    dm->dm_name);
-	}
+	for (i = 0; i <= maxcdevm; i++)
+		dentry(fp, cdevmtab, i, 'c');
 
 	fputs("\nconst struct cdevsw *cdevsw0[] = {\n", fp);
 
-	for (i = 0 ; i <= maxcdevm ; i++) {
-		(void)snprintf(mstr, sizeof(mstr), "%d", i);
-		if ((dm = ht_lookup(cdevmtab, intern(mstr))) == NULL) {
-			fprintf(fp, "\tNULL,\n");
-		} else {
-			fprintf(fp, "\t&%s_cdevsw,\n", dm->dm_name);
-		}
-	}
+	for (i = 0; i <= maxcdevm; i++)
+		pentry(fp, cdevmtab, i, 'c');
 
 	fputs("};\n\nconst struct cdevsw **cdevsw = cdevsw0;\n", fp);
 

Reply via email to