From: Andreas Schwab Date: Sat, 07 Nov 2009 16:14:43 GMT Subject: Re: [cgit PATCH] Close file descriptor on error in readfile() Message-ID: In-Reply-To: <8c5c35580911070659h35c44421q713ddba97318e2b8@mail.gmail.com> Lars Hjemli writes: > 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. > - 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); Likewise. Andreas. -- 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."