diff options
author | imp <imp@FreeBSD.org> | 2006-10-24 00:31:59 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2006-10-24 00:31:59 +0000 |
commit | 340936b70bdb4f940477575096982f8c30f45acd (patch) | |
tree | d2c2a39616e0e8222e96a33e03e28df657833fef /usr.sbin | |
parent | 38fb98a99068cbc7a00d904df8f4a044c7e2652b (diff) | |
download | FreeBSD-src-340936b70bdb4f940477575096982f8c30f45acd.zip FreeBSD-src-340936b70bdb4f940477575096982f8c30f45acd.tar.gz |
End my resistance to jmg's multiple hints files and bring in support
for having multiple hints files generate a correct hints.c (eg, with
all the specified ones catenated together).
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/config/config.h | 8 | ||||
-rw-r--r-- | usr.sbin/config/config.y | 10 | ||||
-rw-r--r-- | usr.sbin/config/main.c | 1 | ||||
-rw-r--r-- | usr.sbin/config/mkmakefile.c | 15 |
4 files changed, 19 insertions, 15 deletions
diff --git a/usr.sbin/config/config.h b/usr.sbin/config/config.h index 31d3375..08ac796 100644 --- a/usr.sbin/config/config.h +++ b/usr.sbin/config/config.h @@ -127,9 +127,15 @@ struct opt_list { SLIST_HEAD(, opt_list) otab; +struct hint { + char *hint_name; + STAILQ_ENTRY(hint) hint_next; +}; + +STAILQ_HEAD(hint_head, hint) hints; + extern char *ident; extern char *env; -extern char *hints; extern int do_trace; extern int envmode; extern int hintmode; diff --git a/usr.sbin/config/config.y b/usr.sbin/config/config.y index 444fe58..40ee93d 100644 --- a/usr.sbin/config/config.y +++ b/usr.sbin/config/config.y @@ -81,7 +81,6 @@ struct device_head dtab; char *ident; char *env; int envmode; -char *hints; int hintmode; int yyline; const char *yyfile; @@ -191,10 +190,11 @@ Config_spec: } | HINTS ID = { - if (hints != NULL) - errx(1, "More than one 'hints' line at %s:%d", yyfile, - yyline); - hints = $2; + struct hint *hint; + + hint = (struct hint *)calloc(1, sizeof (struct hint)); + hint->hint_name = $2; + STAILQ_INSERT_TAIL(&hints, hint, hint_next); hintmode = 1; } diff --git a/usr.sbin/config/main.c b/usr.sbin/config/main.c index a87f3d7..f9d2322 100644 --- a/usr.sbin/config/main.c +++ b/usr.sbin/config/main.c @@ -160,6 +160,7 @@ main(int argc, char **argv) STAILQ_INIT(&fntab); SLIST_INIT(&cputype); STAILQ_INIT(&ftab); + STAILQ_INIT(&hints); if (yyparse()) exit(3); diff --git a/usr.sbin/config/mkmakefile.c b/usr.sbin/config/mkmakefile.c index 47a1db0..62603d5 100644 --- a/usr.sbin/config/mkmakefile.c +++ b/usr.sbin/config/mkmakefile.c @@ -182,17 +182,11 @@ makefile(void) void makehints(void) { - FILE *ifp, *ofp; + FILE *ifp = NULL, *ofp; char line[BUFSIZ]; char *s; + struct hint *hint; - if (hints) { - ifp = fopen(hints, "r"); - if (ifp == NULL) - err(1, "%s", hints); - } else { - ifp = NULL; - } ofp = fopen(path("hints.c.new"), "w"); if (ofp == NULL) err(1, "%s", path("hints.c.new")); @@ -201,7 +195,10 @@ makehints(void) fprintf(ofp, "\n"); fprintf(ofp, "int hintmode = %d;\n", hintmode); fprintf(ofp, "char static_hints[] = {\n"); - if (ifp) { + STAILQ_FOREACH(hint, &hints, hint_next) { + ifp = fopen(hint->hint_name, "r"); + if (ifp == NULL) + err(1, "%s", hint->hint_name); while (fgets(line, BUFSIZ, ifp) != 0) { /* zap trailing CR and/or LF */ while ((s = rindex(line, '\n')) != NULL) |