summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--shared.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/shared.c b/shared.c
index d7b2d5a..a27ab30 100644
--- a/shared.c
+++ b/shared.c
@@ -408,6 +408,10 @@ int readfile(const char *path, char **buf, size_t *size)
return errno;
- if (fstat(fd, &st))
+ if (fstat(fd, &st)) {
+ close(fd);
return errno;
- if (!S_ISREG(st.st_mode))
+ }
+ if (!S_ISREG(st.st_mode)) {
+ close(fd);
return EISDIR;
+ }
*buf = xmalloc(st.st_size + 1);
@@ -415,2 +419,3 @@ int readfile(const char *path, char **buf, size_t *size)
(*buf)[*size] = '\0';
+ close(fd);
return (*size == st.st_size ? 0 : errno);