diff --git a/usr.sbin/config/config.h b/usr.sbin/config/config.h index 31d3375d6174..08ac7969e228 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 444fe581f1f7..40ee93d584e7 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 a87f3d787745..f9d2322fcc04 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 47a1db0bea80..62603d54d2cf 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)