diff options
author | Eric Blake <eblake@redhat.com> | 2007-06-04 18:10:17 +0000 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2007-06-04 18:10:17 +0000 |
commit | 17c61d6a2c4868260c1ef3043e03f86de14f6a08 (patch) | |
tree | c795768b8f7d0fa0048f5bd77f6dad9c5ce069e1 /newlib/libc/stdio/fflush.c | |
parent | 6a3b4eb69a7d2b1e1c19a8baef42ce6dc3d61a86 (diff) | |
download | newlib-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/fflush.c')
-rw-r--r-- | newlib/libc/stdio/fflush.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/newlib/libc/stdio/fflush.c b/newlib/libc/stdio/fflush.c index d46b41f..d375d95 100644 --- a/newlib/libc/stdio/fflush.c +++ b/newlib/libc/stdio/fflush.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1990, 2006 The Regents of the University of California. + * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted @@ -90,7 +90,7 @@ _DEFUN(fflush, (fp), t = fp->_flags; if ((t & __SWR) == 0) { - _fpos_t _EXFUN((*seekfn), (_PTR, _fpos_t, int)); + _fpos_t _EXFUN((*seekfn), (struct _reent *, _PTR, _fpos_t, int)); /* For a read stream, an fflush causes the next seek to be unoptimized (i.e. forces a system-level seek). This conforms @@ -114,7 +114,7 @@ _DEFUN(fflush, (fp), else { /* We don't know current physical offset, so ask for it. */ - curoff = (*seekfn) (fp->_cookie, (_fpos_t) 0, SEEK_CUR); + curoff = seekfn (_REENT, fp->_cookie, (_fpos_t) 0, SEEK_CUR); if (curoff == -1L) { _funlockfile (fp); @@ -130,7 +130,7 @@ _DEFUN(fflush, (fp), curoff -= fp->_ur; } /* Now physically seek to after byte last read. */ - if ((*seekfn)(fp->_cookie, curoff, SEEK_SET) != -1) + if (seekfn (_REENT, fp->_cookie, curoff, SEEK_SET) != -1) { /* Seek successful. We can clear read buffer now. */ fp->_flags &= ~__SNPT; @@ -139,7 +139,7 @@ _DEFUN(fflush, (fp), if (fp->_flags & __SOFF) fp->_offset = curoff; } - } + } _funlockfile (fp); return 0; } @@ -161,7 +161,7 @@ _DEFUN(fflush, (fp), while (n > 0) { - t = (*fp->_write) (fp->_cookie, (char *) p, n); + t = fp->_write (_REENT, fp->_cookie, (char *) p, n); if (t <= 0) { fp->_flags |= __SERR; |