version 1.16, 2022/04/10 20:03:38 |
version 1.17, 2022/04/10 21:04:06 |
|
|
#include "config.h" |
#include "config.h" |
#include "log.h" |
#include "log.h" |
|
|
static struct file { |
#define START_EXPAND 1 |
FILE *stream; |
#define DONE_EXPAND 2 |
char *name; |
|
size_t ungetpos; |
|
size_t ungetsize; |
|
u_char *ungetbuf; |
|
int eof_reached; |
|
int lineno; |
|
} *f; |
|
|
|
|
static struct file *f; |
|
|
int lookup(char *); |
int lookup(char *); |
int igetc(void); |
int igetc(void); |
int lgetc(int); |
int lgetc(int); |
Line 50 int yyerror(const char *, ...) |
|
Line 45 int yyerror(const char *, ...) |
|
int config_load(struct blind *); |
int config_load(struct blind *); |
struct file *config_push(const char *); |
struct file *config_push(const char *); |
int config_close(void); |
int config_close(void); |
#define START_EXPAND 1 |
|
#define DONE_EXPAND 2 |
|
static int expanding; |
static int expanding; |
|
static int errors = 0; |
|
struct blind *env = NULL; |
|
|
TAILQ_HEAD(symhead, sym) symhead = TAILQ_HEAD_INITIALIZER(symhead); |
TAILQ_HEAD(symhead, sym) symhead = TAILQ_HEAD_INITIALIZER(symhead); |
struct sym { |
struct sym { |
|
|
char *nam; |
char *nam; |
char *val; |
char *val; |
}; |
}; |
|
|
char *symget(const char *); |
char *symget(const char *); |
|
|
struct blind *env = NULL; |
|
static int errors = 0; |
|
|
|
typedef struct { |
typedef struct { |
union { |
union { |
int64_t number; |
int64_t number; |
|
|
int c; |
int c; |
|
|
while (1) { |
while (1) { |
if (f->ungetpos > 0) |
if (f->unpos > 0) |
c = f->ungetbuf[--f->ungetpos]; |
c = f->unbuf[--f->unpos]; |
else |
else |
c = getc(f->stream); |
c = getc(f->stream); |
|
|
Line 218 lgetc(int quotec) |
|
Line 212 lgetc(int quotec) |
|
* count right if last line in included file is syntactically |
* count right if last line in included file is syntactically |
* invalid and has no newline. |
* invalid and has no newline. |
*/ |
*/ |
if (f->eof_reached == 0) { |
if (f->eof == 0) { |
f->eof_reached = 1; |
f->eof = 1; |
return ('\n'); |
return ('\n'); |
} |
} |
while (c == EOF) { |
while (c == EOF) { |
|
|
if (c == EOF) |
if (c == EOF) |
return; |
return; |
|
|
if (f->ungetpos >= f->ungetsize) { |
if (f->unpos >= f->unsize) { |
void *p = reallocarray(f->ungetbuf, f->ungetsize, 2); |
void *p = reallocarray(f->unbuf, f->unsize, 2); |
if (p == NULL) |
if (p == NULL) |
log_fatal("cannot reallocate memory"); |
log_fatal("cannot reallocate memory"); |
f->ungetbuf = p; |
f->unbuf = p; |
f->ungetsize *= 2; |
f->unsize *= 2; |
} |
} |
f->ungetbuf[f->ungetpos++] = c; |
f->unbuf[f->unpos++] = c; |
} |
} |
|
|
int |
int |
Line 455 config_load(struct blind *temp) |
|
Line 449 config_load(struct blind *temp) |
|
return (-1); |
return (-1); |
} |
} |
f->lineno = 1; |
f->lineno = 1; |
f->ungetsize = 16; |
f->unsize = 16; |
f->ungetbuf = malloc(f->ungetsize); |
if ((f->unbuf = malloc(f->unsize)) == NULL) { |
if (f->ungetbuf == NULL) { |
|
log_debug("cannot allocate buffer"); |
log_debug("cannot allocate buffer"); |
fclose(f->stream); |
fclose(f->stream); |
free(f->name); |
free(f->name); |
Line 479 config_close(void) |
|
Line 472 config_close(void) |
|
{ |
{ |
fclose(f->stream); |
fclose(f->stream); |
free(f->name); |
free(f->name); |
free(f->ungetbuf); |
free(f->unbuf); |
free(f); |
free(f); |
|
|
return (EOF); |
return (EOF); |