Re: [cgit PATCH] Close file descriptor on error in readfile()
Lars Hjemli <hjemli@gmail.com> writes:
Show 12 quoted lines
> diff --git a/shared.c b/shared.c
> index d7b2d5a..a27ab30 100644
> --- a/shared.c
> +++ b/shared.c
> @@ -406,12 +406,17 @@ int readfile(const char *path, char **buf, size_t *size)
> fd = open(path, O_RDONLY);
> if (fd == -1)
> return errno;
> - if (fstat(fd, &st))
> + if (fstat(fd, &st)) {
> + close(fd);
> return errno;The close call can clobber errno.
Show 11 quoted lines
> - if (!S_ISREG(st.st_mode))
> + }
> + if (!S_ISREG(st.st_mode)) {
> + close(fd);
> return EISDIR;
> + }
> *buf = xmalloc(st.st_size + 1);
> *size = read_in_full(fd, *buf, st.st_size);
> (*buf)[*size] = '\0';
> + close(fd);
> return (*size == st.st_size ? 0 : errno);--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."