summaryrefslogtreecommitdiffstats
path: root/usr.sbin/config
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2006-10-24 00:31:59 +0000
committerimp <imp@FreeBSD.org>2006-10-24 00:31:59 +0000
commit340936b70bdb4f940477575096982f8c30f45acd (patch)
treed2c2a39616e0e8222e96a33e03e28df657833fef /usr.sbin/config
parent38fb98a99068cbc7a00d904df8f4a044c7e2652b (diff)
downloadFreeBSD-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/config')
-rw-r--r--usr.sbin/config/config.h8
-rw-r--r--usr.sbin/config/config.y10
-rw-r--r--usr.sbin/config/main.c1
-rw-r--r--usr.sbin/config/mkmakefile.c15
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)
OpenPOWER on IntegriCloud