=================================================================== RCS file: /cvs/cvs/blind/parse.y,v retrieving revision 1.15 retrieving revision 1.16 diff -u -p -r1.15 -r1.16 --- blind/parse.y 2022/04/03 13:52:00 1.15 +++ blind/parse.y 2022/04/10 20:03:38 1.16 @@ -26,7 +26,7 @@ #include "log.h" static struct file { - FILE *stream; + FILE *stream; char *name; size_t ungetpos; size_t ungetsize; @@ -49,7 +49,10 @@ int yyerror(const char *, ...) int config_load(struct blind *); struct file *config_push(const char *); -int config_pop(void); +int config_close(void); +#define START_EXPAND 1 +#define DONE_EXPAND 2 +static int expanding; TAILQ_HEAD(symhead, sym) symhead = TAILQ_HEAD_INITIALIZER(symhead); struct sym { @@ -148,11 +151,6 @@ lookup(char *s) return (STRING); } -#define START_EXPAND 1 -#define DONE_EXPAND 2 - -static int expanding; - char * symget(const char *nam) { @@ -197,7 +195,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); } @@ -225,7 +223,7 @@ lgetc(int quotec) return ('\n'); } while (c == EOF) { - if (config_pop() == EOF) + if (config_close() == EOF) return (EOF); c = igetc(); } @@ -362,7 +360,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 +430,57 @@ 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->ungetsize = 16; + f->ungetbuf = malloc(f->ungetsize); + if (f->ungetbuf == 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->ungetbuf); + free(f); + + return (EOF); }