From 83b21262cb16181786f615a3f2c3078fd63b814a Mon Sep 17 00:00:00 2001 From: Camiel Dobbelaar Date: Fri, 11 Oct 2002 12:57:54 +0000 Subject: When a macro cannot be expanded because it is not defined, say so. Also warn about unused macros. ok dhartmei@ henning@ --- sbin/pfctl/parse.y | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'sbin/pfctl/parse.y') diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y index d3cb35f47ce..05b74b0ae62 100644 --- a/sbin/pfctl/parse.y +++ b/sbin/pfctl/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.166 2002/10/11 12:46:05 camield Exp $ */ +/* $OpenBSD: parse.y,v 1.167 2002/10/11 12:57:53 camield Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. @@ -187,6 +187,7 @@ int getservice(char *); struct sym { struct sym *next; + int used; char *nam; char *val; }; @@ -2520,8 +2521,10 @@ top: break; } val = symget(buf); - if (val == NULL) - return (ERROR); + if (val == NULL) { + yyerror("macro '%s' not defined", buf); + return (findeol()); + } parsebuf = val; parseindex = 0; goto top; @@ -2631,12 +2634,21 @@ top: int parse_rules(FILE *input, struct pfctl *xpf) { + struct sym *sym; + fin = input; pf = xpf; lineno = 1; errors = 0; rulestate = PFCTL_STATE_NONE; yyparse(); + + /* Check which macros have not been used. */ + for (sym = symhead; sym; sym = sym->next) + if (!sym->used) + fprintf(stderr, "warning: macro '%s' not used\n", + sym->nam); + return (errors ? -1 : 0); } @@ -2682,6 +2694,7 @@ symset(const char *nam, const char *val) return (-1); } sym->next = symhead; + sym->used = 0; symhead = sym; return (0); } @@ -2692,8 +2705,10 @@ symget(const char *nam) struct sym *sym; for (sym = symhead; sym; sym = sym->next) - if (strcmp(nam, sym->nam) == 0) + if (strcmp(nam, sym->nam) == 0) { + sym->used = 1; return (sym->val); + } return (NULL); } -- cgit v1.2.3