Make preprocessor support more generic by passing all command-line options

after -p except for the last (the ruleset file to process) to the
preprocessor for interpretation.  This allows command-line options besides
-U and -D to be passed to cpp(1) and m4(1) as well as making it easier to
use other preprocessors.

Sponsored By:	NTT Multimedia Communications Labs
MFC after:	1 week
This commit is contained in:
kbyanc 2002-12-23 20:08:21 +00:00
parent cdcec629b7
commit 8d5c6e8eb5
3 changed files with 32 additions and 50 deletions

View File

@ -51,10 +51,9 @@
.Op Fl q
.Oo
.Fl p Ar preproc
.Oo Fl D
.Ar macro Ns Op = Ns Ar value
.Oo
.Ar preproc-flags
.Oc
.Op Fl U Ar macro
.Oc
.Ar pathname
.Sh DESCRIPTION
@ -289,11 +288,8 @@ file systems are mounted (yet) by the time
is being run (e.g. when they are mounted over NFS).
Once
.Fl p
has been specified, optional
.Fl D
and
.Fl U
specifications can follow and will be passed on to the preprocessor.
has been specified, any additional arguments as passed on to the preprocessor
for interpretation.
This allows for flexible configuration files (like conditionalizing
them on the local hostname) and the use of macros to centralize
frequently required arguments like IP addresses.

View File

@ -2529,28 +2529,8 @@ ipfw_readfile(int ac, char *av[])
pid_t preproc = 0;
int c;
while ((c = getopt(ac, av, "D:U:p:q")) != -1)
while ((c = getopt(ac, av, "p:q")) != -1) {
switch(c) {
case 'D':
if (!pflag)
errx(EX_USAGE, "-D requires -p");
if (i > MAX_ARGS - 2)
errx(EX_USAGE,
"too many -D or -U options");
args[i++] = "-D";
args[i++] = optarg;
break;
case 'U':
if (!pflag)
errx(EX_USAGE, "-U requires -p");
if (i > MAX_ARGS - 2)
errx(EX_USAGE,
"too many -D or -U options");
args[i++] = "-U";
args[i++] = optarg;
break;
case 'p':
pflag = 1;
cmd = optarg;
@ -2567,6 +2547,19 @@ ipfw_readfile(int ac, char *av[])
" summary ``ipfw''");
}
if (pflag)
break;
}
if (pflag) {
/* Pass all but the last argument to the preprocessor. */
while (optind < ac - 1) {
if (i >= MAX_ARGS)
errx(EX_USAGE, "too many preprocessor options");
args[i++] = av[optind++];
}
}
av += optind;
ac -= optind;
if (ac != 1)

View File

@ -3429,28 +3429,8 @@ ipfw_readfile(int ac, char *av[])
pid_t preproc = 0;
int c;
while ((c = getopt(ac, av, "D:U:p:q")) != -1)
while ((c = getopt(ac, av, "p:q")) != -1) {
switch(c) {
case 'D':
if (!pflag)
errx(EX_USAGE, "-D requires -p");
if (i > MAX_ARGS - 2)
errx(EX_USAGE,
"too many -D or -U options");
args[i++] = "-D";
args[i++] = optarg;
break;
case 'U':
if (!pflag)
errx(EX_USAGE, "-U requires -p");
if (i > MAX_ARGS - 2)
errx(EX_USAGE,
"too many -D or -U options");
args[i++] = "-U";
args[i++] = optarg;
break;
case 'p':
pflag = 1;
cmd = optarg;
@ -3467,6 +3447,19 @@ ipfw_readfile(int ac, char *av[])
" summary ``ipfw''");
}
if (pflag)
break;
}
if (pflag) {
/* Pass all but the last argument to the preprocessor. */
while (optind < ac - 1) {
if (i >= MAX_ARGS)
errx(EX_USAGE, "too many preprocessor options");
args[i++] = av[optind++];
}
}
av += optind;
ac -= optind;
if (ac != 1)