diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-05-12 00:03:51 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-05-12 00:03:51 +0300 |
commit | f8ca129aaf4876dfa9778c34ed5bd8a669ca22e8 (patch) | |
tree | 9364824e2bc04d62c14a9f539e6b258131e437ad /src | |
parent | 3e5d6e9683d5d3efa3a82556d0f73892d674ed71 (diff) | |
download | grecs-f8ca129aaf4876dfa9778c34ed5bd8a669ca22e8.tar.gz grecs-f8ca129aaf4876dfa9778c34ed5bd8a669ca22e8.tar.bz2 |
Bugfixes.
Diffstat (limited to 'src')
-rw-r--r-- | src/grecs.h | 2 | ||||
-rw-r--r-- | src/preproc.c | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/grecs.h b/src/grecs.h index 40ade87..b2ef734 100644 --- a/src/grecs.h +++ b/src/grecs.h @@ -274,24 +274,26 @@ void grecs_format_value(struct grecs_value *val, int flags, FILE *fp); #define GRECS_NODE_FLAG_DEFAULT \ (GRECS_NODE_FLAG_PATH|GRECS_NODE_FLAG_VALUE|GRECS_NODE_FLAG_QUOTE) void grecs_format_node(struct grecs_node *node, int flags, FILE *fp); struct grecs_list *grecs_list_create(void); size_t grecs_list_size(struct grecs_list *lp); void grecs_list_append(struct grecs_list *lp, void *val); void grecs_list_push(struct grecs_list *lp, void *val); void *grecs_list_pop(struct grecs_list *lp); void *grecs_list_locate(struct grecs_list *lp, void *data); void *grecs_list_index(struct grecs_list *lp, size_t idx); void *grecs_list_remove_tail(struct grecs_list *lp); +void grecs_list_remove_entry(struct grecs_list *lp, + struct grecs_list_entry *ent); void grecs_list_clear(struct grecs_list *lp); void grecs_list_free(struct grecs_list *lp); void grecs_list_add(struct grecs_list *dst, struct grecs_list *src); int grecs_vasprintf(char **pbuf, size_t *psize, const char *fmt, va_list ap); int grecs_asprintf(char **pbuf, size_t *psize, const char *fmt, ...); struct grecs_symtab; struct grecs_syment { char *name; }; diff --git a/src/preproc.c b/src/preproc.c index cff8224..cd83e2f 100644 --- a/src/preproc.c +++ b/src/preproc.c @@ -407,25 +407,26 @@ push_source(const char *name, int once) return 1; } } else if (rc) { grecs_error(NULL, errno, _("Cannot stat `%s'"), name); return 1; } if (once && source_lookup(&st)) return -1; fp = fopen(name, "r"); if (!fp) { - grecs_error(&LOCUS, errno, _("Cannot open `%s'"), name); + grecs_error(context_stack ? &LOCUS : NULL, errno, + _("Cannot open `%s'"), name); return 1; } /* Push current context */ ctx = grecs_malloc(sizeof(*ctx)); ctx->locus.file = grecs_install_text(name); ctx->locus.line = 1; ctx->xlines = 0; ctx->namelen = strlen(ctx->locus.file); ctx->id.i_node = st.st_ino; ctx->id.device = st.st_dev; ctx->infile = fp; @@ -448,33 +449,33 @@ pop_source() if (!context_stack) return 1; fclose(INFILE); /* Restore previous context */ ctx = context_stack->prev; grecs_free(context_stack); context_stack = ctx; if (!context_stack) { if (grecs_yy_flex_debug) - fprintf (stderr, "End of input\n"); + fprintf(stderr, "End of input\n"); return 1; } LOCUS.line++; if (grecs_yy_flex_debug) - fprintf (stderr, "Resuming file `%s' at line %lu\n", - LOCUS.file, (unsigned long) LOCUS.line); + fprintf(stderr, "Resuming file `%s' at line %lu\n", + LOCUS.file, (unsigned long) LOCUS.line); pp_line_stmt(); return 0; } static int try_file(const char *name, int allow_cwd, int err_not_found, char **newp) { static char *cwd = "."; struct file_data fd; |