X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/507116e319a1470bb0a5040d4d23e5c76955ef97..a9aaacca3a68bb8d74fec09d8d8681a0efda2581:/stdio/FreeBSD/fclose.c diff --git a/stdio/FreeBSD/fclose.c b/stdio/FreeBSD/fclose.c index 5a6183c..25a6cbb 100644 --- a/stdio/FreeBSD/fclose.c +++ b/stdio/FreeBSD/fclose.c @@ -48,6 +48,7 @@ int fclose(FILE *fp) { int r; + int error = 0; pthread_once(&__sdidinit, __sinit); @@ -61,8 +62,13 @@ fclose(FILE *fp) } FLOCKFILE(fp); r = __sflush(fp); - if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0) + if (r < 0) { + error = errno; + } + if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0) { r = EOF; + error = errno; + } if (fp->_flags & __SMBF) free((char *)fp->_bf._base); if (HASUB(fp)) @@ -73,5 +79,9 @@ fclose(FILE *fp) fp->_r = fp->_w = 0; /* Mess up if reaccessed. */ FUNLOCKFILE(fp); __sfprelease(fp); /* Release this FILE for reuse. */ + /* Don't clobber errno unnecessarily. */ + if (error) { + errno = error; + } return (r); }