check for same rule name in different files

SCCS-file: zic.c
SCCS-SID: 7.71
This commit is contained in:
Arthur David Olson
2012-07-18 03:02:23 -04:00
committed by Paul Eggert
parent 61b817b01a
commit 5a6c84bec4
+41 -2
View File
@@ -428,6 +428,19 @@ const char * const string;
++errors; ++errors;
} }
static void
warning(string)
const char * const string;
{
char * cp;
cp = ecpyalloc("warning: ");
cp = ecatalloc(cp, string);
error(string);
ifree(cp);
--errors;
}
static void static void
usage P((void)) usage P((void))
{ {
@@ -680,11 +693,37 @@ associate P((void))
register struct zone * zp; register struct zone * zp;
register struct rule * rp; register struct rule * rp;
register int base, out; register int base, out;
register int i; register int i, j;
if (nrules != 0) if (nrules != 0) {
(void) qsort((void *) rules, (size_t) nrules, (void) qsort((void *) rules, (size_t) nrules,
(size_t) sizeof *rules, rcomp); (size_t) sizeof *rules, rcomp);
for (i = 0; i < nrules - 1; ++i) {
if (strcmp(rules[i].r_name,
rules[i + 1].r_name) != 0)
continue;
if (strcmp(rules[i].r_filename,
rules[i + 1].r_filename) == 0)
continue;
eat(rules[i].r_filename, rules[i].r_linenum);
warning(_("same rule name in multiple files"));
eat(rules[i + 1].r_filename, rules[i + 1].r_linenum);
warning(_("same rule name in multiple files"));
for (j = i + 2; j < nrules; ++j) {
if (strcmp(rules[i].r_name,
rules[j].r_name) != 0)
break;
if (strcmp(rules[i].r_filename,
rules[j].r_filename) == 0)
continue;
if (strcmp(rules[i + 1].r_filename,
rules[j].r_filename) == 0)
continue;
break;
}
i = j - 1;
}
}
for (i = 0; i < nzones; ++i) { for (i = 0; i < nzones; ++i) {
zp = &zones[i]; zp = &zones[i];
zp->z_rules = NULL; zp->z_rules = NULL;