===================================================================
RCS file: /cvs/cvs/blind/parse.y,v
retrieving revision 1.14
retrieving revision 1.18
diff -u -p -r1.14 -r1.18
--- blind/parse.y	2022/03/29 22:16:46	1.14
+++ blind/parse.y	2022/04/10 21:20:24	1.18
@@ -25,15 +25,8 @@
 #include "config.h"
 #include "log.h"
 
-static struct file {
-        FILE                    *stream;
-        char                    *name;
-        size_t                   ungetpos;
-        size_t                   ungetsize;
-        u_char                  *ungetbuf;
-        int                      eof_reached;
-        int                      lineno;
-} *f;
+#define EXPAND_ON	1
+#define EXPAND_OFF	2
 
 int		lookup(char *);
 int		igetc(void);
@@ -47,27 +40,29 @@ int		yyerror(const char *, ...)
 		__attribute__((__format__ (printf, 1, 2)))
 		__attribute__((__nonnull__ (1)));
 
+char	       *symget(const char *);
+
 int		config_load(struct blind *);
-struct file    *config_push(const char *);
-int		config_pop(void);
+int		config_close(void);
 
-TAILQ_HEAD(symhead, sym)	 symhead = TAILQ_HEAD_INITIALIZER(symhead);
+static int			expanding;
+static int			errors = 0;
+struct blind		       *env = NULL;
+static struct file	       *f = NULL;
+
+TAILQ_HEAD(symhead, sym)	symhead = TAILQ_HEAD_INITIALIZER(symhead);
 struct sym {
-	TAILQ_ENTRY(sym)	 entry;
-	int			 used;
-	int			 persist;
-	char			*nam;
-	char			*val;
+	TAILQ_ENTRY(sym)      	entry;
+	int			used;
+	int			persist;
+	char		       *nam;
+	char		       *val;
 };
-char	       *symget(const char *);
 
-struct blind   *env = NULL;
-static int	errors = 0;
-
 typedef struct {
 	union {
-		int64_t	 number;
-		char	*string;
+		int64_t		number;
+		char	       *string;
 	} v;
 	int lineno;
 } YYSTYPE;
@@ -82,26 +77,26 @@ typedef struct {
 
 grammar	:
 	| grammar '\n'
-        | grammar set '\n'
-        | grammar error '\n'	{ errors++; }
-        ;
+	| grammar set '\n'
+	| grammar error '\n'	{ errors++; }
+	;
 
 set	: SET EXPIRE NUMBER {
-        env->bl_ttl = $3;
+	env->bl_ttl = $3;
 }
 | SET ACTION ENABLE {
-        env->bl_opt |= BL_OPT_ACTION;
+	env->bl_opt |= BL_OPT_ACTION;
  }
 | SET ACTION DISABLE {
-        env->bl_opt |= !BL_OPT_ACTION;
+	env->bl_opt |= !BL_OPT_ACTION;
  }
 ;
 
 %%
 
 struct keywords {
-	const char	*k_name;
-	int		 k_val;
+	const char	       *k_name;
+	int			k_val;
 };
 
 int
@@ -115,7 +110,7 @@ yyerror(const char *fmt, ...)
 	if (vasprintf(&msg, fmt, ap) == -1)
 		log_fatal("yyerror vasprintf");
 	va_end(ap);
-        log_info("%s:%d: %s", f->name, yylval.lineno, msg);
+	log_info("%s:%d: %s", f->name, yylval.lineno, msg);
 	free(msg);
 	return (0);
 }
@@ -148,11 +143,6 @@ lookup(char *s)
 		return (STRING);
 }
 
-#define START_EXPAND	1
-#define DONE_EXPAND	2
-
-static int	expanding;
-
 char *
 symget(const char *nam)
 {
@@ -173,14 +163,14 @@ igetc(void)
 	int	c;
 
 	while (1) {
-		if (f->ungetpos > 0)
-			c = f->ungetbuf[--f->ungetpos];
+		if (f->unpos > 0)
+			c = f->unbuf[--f->unpos];
 		else
 			c = getc(f->stream);
 
-		if (c == START_EXPAND)
+		if (c == EXPAND_ON)
 			expanding = 1;
-		else if (c == DONE_EXPAND)
+		else if (c == EXPAND_OFF)
 			expanding = 0;
 		else
 			break;
@@ -197,7 +187,7 @@ lgetc(int quotec)
 		if ((c = igetc()) == EOF) {
 			yyerror("reached end of file while parsing "
 			    "quoted string");
-                        if (config_pop() == EOF)
+                        if (config_close() == EOF)
 				return (EOF);
 			return (quotec);
 		}
@@ -220,12 +210,12 @@ lgetc(int quotec)
 		 * count right if last line in included file is syntactically
 		 * invalid and has no newline.
 		 */
-		if (f->eof_reached == 0) {
-			f->eof_reached = 1;
+		if (f->eof == 0) {
+			f->eof = 1;
 			return ('\n');
 		}
 		while (c == EOF) {
-                        if (config_pop() == EOF)
+                        if (config_close() == EOF)
 				return (EOF);
 			c = igetc();
 		}
@@ -239,14 +229,14 @@ lungetc(int c)
 	if (c == EOF)
 		return;
 
-	if (f->ungetpos >= f->ungetsize) {
-		void *p = reallocarray(f->ungetbuf, f->ungetsize, 2);
+	if (f->unpos >= f->unsize) {
+		void *p = reallocarray(f->unbuf, f->unsize, 2);
 		if (p == NULL)
 			log_fatal("cannot reallocate memory");
-		f->ungetbuf = p;
-		f->ungetsize *= 2;
+		f->unbuf = p;
+		f->unsize *= 2;
 	}
-	f->ungetbuf[f->ungetpos++] = c;
+	f->unbuf[f->unpos++] = c;
 }
 
 int
@@ -307,12 +297,12 @@ top:
 			return (findeol());
 		}
 		p = val + strlen(val) - 1;
-		lungetc(DONE_EXPAND);
+		lungetc(EXPAND_OFF);
 		while (p >= val) {
 			lungetc((unsigned char)*p);
 			p--;
 		}
-		lungetc(START_EXPAND);
+		lungetc(EXPAND_ON);
 		goto top;
 	}
 
@@ -362,7 +352,7 @@ top:
 	if (c == '-' || isdigit(c)) {
 		do {
 			*p++ = c;
-			if ((size_t)(p-buf) >= sizeof(buf)) {
+                       		if ((size_t)(p-buf) >= sizeof(buf)) {
 				yyerror("string too long");
 				return (findeol());
 			}
@@ -432,73 +422,56 @@ nodigits:
 int
 config_load(struct blind *temp)
 {
-        env = temp;
-        errors = 0;
+	env = temp;
+	errors = 0;
 
-        if ((f = config_push(env->bl_conf)) == NULL) {
-                //       config_purge(PURGE_ALL);
-                return (-1);
+	if ((f = calloc(1, sizeof(struct file))) == NULL) {
+		log_debug("cannot allocate memory");
+		return (-1);
+	}
+	if ((f->name = strdup(env->bl_conf)) == NULL) {
+		log_debug("cannot duplicate name");
+		free(f);
+		return (-1);
         }
+	if ((f->stream = fopen(f->name, "r")) == NULL) {
+		log_debug("cannot open config file");
+		free(f->name);
+		free(f);
+		return (-1);
+	}
+	if (config_perm(fileno(f->stream), f->name)) {
+		fclose(f->stream);
+		free(f->name);
+		free(f);
+		return (-1);
+	}
+	f->lineno = 1;
+	f->unsize = 16;
+	if ((f->unbuf = malloc(f->unsize)) == NULL) {
+		log_debug("cannot allocate buffer");
+		fclose(f->stream);
+		free(f->name);
+		free(f);
+		return (-1);
+	}
 
-        yyparse();
+	yyparse();
+	// setup
 
-        // setup
+	if (errors)
+		return (-1);
 
-        if (errors) {
-                //	config_purge(PURGE_ALL);
-                return (-1);
-        }
-
-        return (0);
+	return (0);
 }
 
-struct file *
-config_push(const char *name)
-{
-        struct file *nf;
-
-        if ((nf = calloc(1, sizeof(struct file))) == NULL) {
-                log_debug("cannot allocate memory");
-                return (NULL);
-        }
-        if ((nf->name = strdup(name)) == NULL) {
-                log_debug("cannot duplicate name");
-                free(nf);
-                return (NULL);
-        }
-        if ((nf->stream = fopen(nf->name, "r")) == NULL) {
-                log_debug("cannot open config file");
-                free(nf->name);
-                free(nf);
-                return (NULL);
-        }
-        if (config_perm(fileno(nf->stream), nf->name)) {
-                fclose(nf->stream);
-                free(nf->name);
-                free(nf);
-                return (NULL);
-        }
-        nf->lineno = 1;
-        nf->ungetsize = 16;
-        nf->ungetbuf = malloc(nf->ungetsize);
-        if (nf->ungetbuf == NULL) {
-                log_debug("cannot allocate buffer");
-                fclose(nf->stream);
-                free(nf->name);
-                free(nf);
-                return (NULL);
-        }
-
-        return (nf);
-}
-
 int
-config_pop(void)
+config_close(void)
 {
-        fclose(f->stream);
-        free(f->name);
-        free(f->ungetbuf);
-        free(f);
-        
-        return (EOF);
+	fclose(f->stream);
+	free(f->name);
+	free(f->unbuf);
+	free(f);
+
+	return (EOF);
 }