mirror of https://github.com/omar-polo/gmid.git
don't expand macros inside the quotes
Now that we have this auto concat string thingy, macros can simply expand to standalone strings in place, as single words. Forgot to point it out in previous commits, but now we can cert = "/etc/keys" server "foo" { cert $cert "/foo.crt" ... }
This commit is contained in:
parent
7252049dd7
commit
bfb076ed7e
2
gmid.1
2
gmid.1
|
@ -157,7 +157,7 @@ Macros can be defined that will later be expanded in context.
|
|||
Macro names must start with a letter, digit or underscore and may
|
||||
contain any of those characters.
|
||||
Macro names may not be reserved words.
|
||||
Macros are expanded inside the quotes too.
|
||||
Macros are not expanded inside quotes.
|
||||
.Pp
|
||||
For example:
|
||||
.Bd -literal -offset indent
|
||||
|
|
11
parse.y
11
parse.y
|
@ -416,7 +416,6 @@ repeat:
|
|||
goto eof;
|
||||
}
|
||||
|
||||
top:
|
||||
/* parsing next word */
|
||||
for (;; c = getc(yyfp), yylval.colno++) {
|
||||
switch (c) {
|
||||
|
@ -433,7 +432,7 @@ top:
|
|||
|
||||
/* expand macros in-place */
|
||||
case '$':
|
||||
if (!escape) {
|
||||
if (!escape && !quotes) {
|
||||
v = p;
|
||||
while (1) {
|
||||
if ((c = getc(yyfp)) == EOF) {
|
||||
|
@ -449,24 +448,24 @@ top:
|
|||
continue;
|
||||
}
|
||||
*p = 0;
|
||||
ungetc(c, yyfp);
|
||||
break;
|
||||
}
|
||||
p = v;
|
||||
if ((val = symget(p)) == NULL) {
|
||||
yyerror("macro '%s' not defined", v);
|
||||
goto top;
|
||||
return TERR;
|
||||
}
|
||||
len = strlen(val);
|
||||
if (p + len >= ebuf - 1) {
|
||||
yyerror("after macro-expansion, "
|
||||
"string too long");
|
||||
goto top;
|
||||
return TERR;
|
||||
}
|
||||
*p = '\0';
|
||||
strlcat(p, val, ebuf - p);
|
||||
p += len;
|
||||
goto top;
|
||||
nonkw = 1;
|
||||
goto eow;
|
||||
}
|
||||
break;
|
||||
case '\n':
|
||||
|
|
Loading…
Reference in New Issue