Date: Wed, 8 Oct 2003 21:45:47 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: "Adam C. Migus" <adam@migus.org> Cc: John Baldwin <jhb@FreeBSD.org> Subject: Re: sys/conf/DEFAULT[S] Message-ID: <20031008212302.T4729@gamplex.bde.org> In-Reply-To: <49955.192.168.4.2.1065074430.squirrel@mail.migus.org> References: <XFMail.20030924170342.jhb@FreeBSD.org> <20030925092319.H5418@gamplex.bde.org><49939.204.254.155.35.1064593320.squirrel@mail.migus.org> <49955.192.168.4.2.1065074430.squirrel@mail.migus.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2 Oct 2003, Adam C. Migus wrote: > > On Fri, 26 Sep 2003, Adam C. Migus wrote: > > This patch works for me, please let me know if there's any problems > with it or you'd like a PR. % ==== //depot/user/amigus/freebsd-amigus/src/usr.sbin/config/config.y#1 - /src/p4/user/amigus/perforce.freebsd.org/freebsd-amigus/usr.sbin/config/config.y ==== % @@ -118,6 +118,8 @@ % | % Config_spec SEMICOLON % | % + Include % + | % SEMICOLON % | % error SEMICOLON % @@ -164,9 +166,7 @@ % = { % hints = $2; % hintmode = 1; % - } | % - INCLUDE ID % - = { include($2, 0); }; % + }; % % System_spec: % CONFIG System_id System_parameter_list % @@ -265,6 +265,11 @@ % rmdev($2); % } ; % % +Include: % + INCLUDE ID % + = { include($2, 0); }; % + % + % %% % % void I found 1 problem with this: it doesn't require SEMICOLON after "INCLUDE ID", so parsing resumes after "ID" when the input stream is switched back to the includer. You can say things like include FOO device foo and then the "device foo" directive actually works. This can be considered a feature, but the following is not: include GENERIC.local at the end of GENERIC should be a syntax error, but it actually matches ID = GENERIC and includes GENERIC recursively, which gives a confusing error message. There would be a syntax error on switching back but config aborts before then. (Filenames other than single identifiers must be quoted to avoid problems like this. This is not very obvious since config was changed to not require quotes in most contexts.) Stefan's version requires SEMICOLON: % Index: src/usr.sbin/config/config.y % =================================================================== % RCS file: /usr/home/ncvs/src/usr.sbin/config/config.y,v % retrieving revision 1.61 % diff -u -r1.61 config.y % --- src/usr.sbin/config/config.y 6 Jul 2003 02:00:52 -0000 1.61 % +++ src/usr.sbin/config/config.y 27 Sep 2003 10:39:13 -0000 % @@ -118,6 +118,9 @@ % | % Config_spec SEMICOLON % | % + INCLUDE ID SEMICOLON % + = { include($2, 0); }; % + | % SEMICOLON % | % error SEMICOLON % @@ -164,9 +167,7 @@ % = { % hints = $2; % hintmode = 1; % - } | % - INCLUDE ID % - = { include($2, 0); }; % + } % % System_spec: % CONFIG System_id System_parameter_list I lost your examples showing that this doesn't quite work. What is the problem with it? Another old bug is that using "include" defeats the point of the INCLUDE_CONFIG_FILE option (since included files aren't expanded). Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031008212302.T4729>