diff options
author | Paweł Redman <pawel.redman@gmail.com> | 2016-12-20 10:54:44 +0100 |
---|---|---|
committer | Paweł Redman <pawel.redman@gmail.com> | 2016-12-20 10:54:44 +0100 |
commit | 28aafa709ffa40e26b4cec71171b46b05f6e28aa (patch) | |
tree | 6d4f96e4d549fe1257c0e9471227d0ac1c49ef03 | |
parent | e68c00d7e00a330be5ca6cf249ae3476a06bfa2f (diff) |
Fix an opened file leak.
-rw-r--r-- | src/common.h | 1 | ||||
-rw-r--r-- | src/lexer.c | 10 | ||||
-rw-r--r-- | 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); |