--- fclose.c.bsdnew 2009-11-11 13:33:03.000000000 -0800 +++ fclose.c 2009-11-11 13:33:03.000000000 -0800 @@ -49,6 +49,13 @@ fclose(FILE *fp) { int r; + if (!__sdidinit) + __sinit(); + + if (fp == NULL) { + errno = EFAULT; + return (EOF); + } if (fp->_flags == 0) { /* not open! */ errno = EBADF; return (EOF); @@ -65,7 +72,7 @@ fclose(FILE *fp) FREELB(fp); fp->_file = -1; fp->_r = fp->_w = 0; /* Mess up if reaccessed. */ - fp->_flags = 0; /* Release this FILE for reuse. */ + __sfprelease(fp); /* Release this FILE for reuse. */ FUNLOCKFILE(fp); return (r); }