aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc/stdio/fclose.c
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2007-06-04 18:10:17 +0000
committerEric Blake <eblake@redhat.com>2007-06-04 18:10:17 +0000
commit17c61d6a2c4868260c1ef3043e03f86de14f6a08 (patch)
treec795768b8f7d0fa0048f5bd77f6dad9c5ce069e1 /newlib/libc/stdio/fclose.c
parent6a3b4eb69a7d2b1e1c19a8baef42ce6dc3d61a86 (diff)
downloadnewlib-17c61d6a2c4868260c1ef3043e03f86de14f6a08.zip
newlib-17c61d6a2c4868260c1ef3043e03f86de14f6a08.tar.gz
newlib-17c61d6a2c4868260c1ef3043e03f86de14f6a08.tar.bz2
Implement funopen, fopencookie.
* libc/include/sys/reent.h (struct __sFILE, struct __sFILE64): Switch to reentrant callbacks. * libc/include/stdio.h (funopen): Fix declaration. (fopencookie): Declare. * libc/stdio/local.h (__sread, __swrite, __sseek, __sclose) (__sseek64, __swrite64): Fix prototypes. [__SCLE]: Pull in setmode declaration. * libc/stdio/stdio.c (__sread, __swrite, __sseek, __sclose): Fix reentrancy. * libc/stdio64/stdio64.c (__sseek64_r, __swrite64_r): Delete. (__sseek64, __swrite64): Fix reentrancy. * libc/stdio/fseek.c (_fseek_r): Account for overflow, and fix reentrancy. * libc/stdio/ftell.c (_ftell_r): Likewise. * libc/stdio/flags.c (__sflags): Don't lose __SAPP on "a+". * libc/stdio/fclose.c (_fclose_r): Fix reentrancy. * libc/stdio/freopen.c (_freopen_r): Likewise. * libc/stdio/fvwrite.c (__sfvwrite_r): Likewise. * libc/stdio/refill.c (__srefill_r): Likewise. * libc/stdio/siscanf.c (eofread): Likewise. * libc/stdio/sscanf.c (eofread): Likewise. * libc/stdio/vsiscanf.c (eofread1): Likewise. * libc/stdio/vsscanf.c (eofread1): Likewise. * libc/stdio64/freopen64.c (_freopen64_r): Likewise. * libc/stdio64/fseeko64.c (_fseeko64_r): Likewise. * libc/stdio64/ftello64.c (_ftello64_r): Likewise. * libc/stdio/fflush.c (fflush): Improve reentrancy, although more could be fixed. * libc/stdio/fopencookie.c (_fopencookie_r, fopencookie): New file. * libc/stdio/funopen.c (_funopen_r, funopen): New file. * libc/stdio/Makefile.am (ELIX_4_SOURCES, CHEWOUT_FILES): Build new files. * libc/stdio/Makefile.in: Regenerate.
Diffstat (limited to 'newlib/libc/stdio/fclose.c')
-rw-r--r--newlib/libc/stdio/fclose.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/newlib/libc/stdio/fclose.c b/newlib/libc/stdio/fclose.c
index d7cfdaf..18cddf0 100644
--- a/newlib/libc/stdio/fclose.c
+++ b/newlib/libc/stdio/fclose.c
@@ -33,7 +33,7 @@ TRAD_SYNOPSIS
#include <stdio.h>
int fclose(<[fp]>)
FILE *<[fp]>;
-
+
int fclose(<[fp]>)
struct _reent *<[reent]>
FILE *<[fp]>;
@@ -79,7 +79,7 @@ _DEFUN(_fclose_r, (rptr, fp),
CHECK_INIT (rptr, fp);
_flockfile (fp);
-
+
if (fp->_flags == 0) /* not open! */
{
_funlockfile (fp);
@@ -90,7 +90,7 @@ _DEFUN(_fclose_r, (rptr, fp),
files to reposition file to last byte processed as opposed to
last byte read ahead into the buffer. */
r = fflush (fp);
- if (fp->_close != NULL && (*fp->_close) (fp->_cookie) < 0)
+ if (fp->_close != NULL && fp->_close (rptr, fp->_cookie) < 0)
r = EOF;
if (fp->_flags & __SMBF)
_free_r (rptr, (char *) fp->_bf._base);