summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2016-12-20 10:54:44 +0100
committerPaweł Redman <pawel.redman@gmail.com>2016-12-20 10:54:44 +0100
commit28aafa709ffa40e26b4cec71171b46b05f6e28aa (patch)
tree6d4f96e4d549fe1257c0e9471227d0ac1c49ef03
parente68c00d7e00a330be5ca6cf249ae3476a06bfa2f (diff)
Fix an opened file leak.
-rw-r--r--src/common.h1
-rw-r--r--src/lexer.c10
-rw-r--r--src/mapcat.c1
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);