]> git.saurik.com Git - apple/libc.git/blobdiff - stdio/FreeBSD/fclose.c
Libc-997.1.1.tar.gz
[apple/libc.git] / stdio / FreeBSD / fclose.c
index ad4dae7a531cddbe64843dc856b6290338de9587..91df68a9044f6d112d771bdf10b24f16ae5d51d9 100644 (file)
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
@@ -38,7 +34,7 @@
 static char sccsid[] = "@(#)fclose.c   8.1 (Berkeley) 6/4/93";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
 static char sccsid[] = "@(#)fclose.c   8.1 (Berkeley) 6/4/93";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/stdio/fclose.c,v 1.11 2002/03/22 21:53:04 obrien Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/stdio/fclose.c,v 1.12 2007/01/09 00:28:06 imp Exp $");
 
 #include "namespace.h"
 #include <errno.h>
 
 #include "namespace.h"
 #include <errno.h>
@@ -53,6 +49,13 @@ fclose(FILE *fp)
 {
        int r;
 
 {
        int r;
 
+       if (!__sdidinit)
+               __sinit();
+
+       if (fp == NULL) {
+               errno = EFAULT;
+               return (EOF);
+       }
        if (fp->_flags == 0) {  /* not open! */
                errno = EBADF;
                return (EOF);
        if (fp->_flags == 0) {  /* not open! */
                errno = EBADF;
                return (EOF);
@@ -69,7 +72,7 @@ fclose(FILE *fp)
                FREELB(fp);
        fp->_file = -1;
        fp->_r = fp->_w = 0;    /* Mess up if reaccessed. */
                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);
 }
        FUNLOCKFILE(fp);
        return (r);
 }