From 28aafa709ffa40e26b4cec71171b46b05f6e28aa Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Tue, 20 Dec 2016 10:54:44 +0100 Subject: Fix an opened file leak. --- src/common.h | 1 + src/lexer.c | 10 ++++++---- src/mapcat.c | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/common.h b/src/common.h index 7420485..0003d43 100644 --- a/src/common.h +++ b/src/common.h @@ -74,6 +74,7 @@ typedef struct { } lexer_state_t; int lexer_open(lexer_state_t *ls, const char *path, vstr_t *token); +void lexer_close(lexer_state_t *ls); int lexer_get_token(lexer_state_t *ls); int lexer_assert(lexer_state_t *ls, const char *match, const char *desc); int lexer_assert_or_eof(lexer_state_t *ls, const char *match, const char *desc); diff --git a/src/lexer.c b/src/lexer.c index 41d6784..5610519 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -41,6 +41,11 @@ int lexer_open(lexer_state_t *ls, const char *path, vstr_t *token) return 0; } +void lexer_close(lexer_state_t *ls) +{ + fclose(ls->fp); +} + //RETURN VALUES // <0 on error // 0 on success @@ -52,13 +57,10 @@ static int fill_buffer(lexer_state_t *ls) read = fread(ls->buf, 1, sizeof(ls->buf), ls->fp); debug("read = %zu\n", read); if (read < sizeof(ls->buf)) { - if (ferror(ls->fp)) { - fclose(ls->fp); + if (ferror(ls->fp)) return -errno; - } ls->eof = true; - fclose(ls->fp); debug("no data left, ls->fp closed\n"); } diff --git a/src/mapcat.c b/src/mapcat.c index d9bff86..0039608 100644 --- a/src/mapcat.c +++ b/src/mapcat.c @@ -413,6 +413,7 @@ int map_read(map_t *map, const char *path) rv = 0; out: vstr_free(&token); + lexer_close(&lexer); if (rv) map_free(map); -- cgit