Module Name:    src
Committed By:   apb
Date:           Tue Jan  1 11:44:01 UTC 2013

Modified Files:
        src/usr.bin/units: units.c

Log Message:
Correctly ignore duplicate definitions.  "continue" applies only to the
innermost loop.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/usr.bin/units/units.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/units/units.c
diff -u src/usr.bin/units/units.c:1.19 src/usr.bin/units/units.c:1.20
--- src/usr.bin/units/units.c:1.19	Fri Dec 28 17:07:03 2012
+++ src/usr.bin/units/units.c	Tue Jan  1 11:44:00 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: units.c,v 1.19 2012/12/28 17:07:03 apb Exp $	*/
+/*	$NetBSD: units.c,v 1.20 2013/01/01 11:44:00 apb Exp $	*/
 
 /*
  * units.c   Copyright (c) 1993 by Adrian Mariano ([email protected])
@@ -109,7 +109,7 @@ readunits(const char *userfile)
 {
 	FILE *unitfile;
 	char line[80], *lineptr;
-	int len, linenum, i;
+	int len, linenum, i, isdup;
 
 	unitcount = 0;
 	linenum = 0;
@@ -173,14 +173,20 @@ readunits(const char *userfile)
 				continue;
 			}
 			lineptr[strlen(lineptr) - 1] = 0;
-			prefixtable[prefixcount].prefixname = dupstr(lineptr);
-			for (i = 0; i < prefixcount; i++)
-				if (!strcmp(prefixtable[i].prefixname, lineptr)) {
-					warnx(
-			"Redefinition of prefix '%s' on line %d ignored",
-					    lineptr, linenum);
-					continue;
+			for (isdup = 0, i = 0; i < prefixcount; i++) {
+				if (!strcmp(prefixtable[i].prefixname,
+				    lineptr)) {
+					isdup = 1;
+					break;
 				}
+			}
+			if (isdup) {
+				warnx(
+			"Redefinition of prefix '%s' on line %d ignored",
+				    lineptr, linenum);
+				continue;
+			}
+			prefixtable[prefixcount].prefixname = dupstr(lineptr);
 			lineptr += len + 1;
 			if (!strlen(lineptr)) {
 				readerror(linenum);
@@ -197,14 +203,19 @@ readunits(const char *userfile)
 				    linenum);
 				continue;
 			}
-			unittable[unitcount].uname = dupstr(lineptr);
-			for (i = 0; i < unitcount; i++)
+			for (isdup = 0, i = 0; i < unitcount; i++) {
 				if (!strcmp(unittable[i].uname, lineptr)) {
-					warnx(
-				"Redefinition of unit '%s' on line %d ignored",
-					    lineptr, linenum);
-					continue;
+					isdup = 1;
+					break;
 				}
+			}
+			if (isdup) {
+				warnx(
+				"Redefinition of unit '%s' on line %d ignored",
+				    lineptr, linenum);
+				continue;
+			}
+			unittable[unitcount].uname = dupstr(lineptr);
 			lineptr += len + 1;
 			lineptr += strspn(lineptr, " \n\t");
 			if (!strlen(lineptr)) {

Reply via email to