2006-02-20 Jeff Johnston <jjohnstn@redhat.com>

* libc/stdio/fflush.c (fflush): For an fflush on a read-only
        stream, turn off fseek/rewind optimization as per POSIX/SUSv3.
        * libc/stdio/fseek.c (_fseek_r): After a successful unoptimized
        seek, turn off the __SNPT no-optimization flag.
This commit is contained in:
Jeff Johnston 2006-02-20 23:24:00 +00:00
parent 8aaf07c7a2
commit 99db626d21
3 changed files with 25 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2006-02-20 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdio/fflush.c (fflush): For an fflush on a read-only
stream, turn off fseek/rewind optimization as per POSIX/SUSv3.
* libc/stdio/fseek.c (_fseek_r): After a successful unoptimized
seek, turn off the __SNPT no-optimization flag.
2006-02-16 Jeff Johnston <jjohnstn@redhat.com>
* libc/sys/linux/aio.c: Define _GNU_SOURCE so struct aioinit

View File

@ -72,8 +72,18 @@ _DEFUN(fflush, (fp),
_flockfile (fp);
t = fp->_flags;
if ((t & __SWR) == 0 || (p = fp->_bf._base) == NULL)
if ((t & __SWR) == 0)
{
/* For a read stream, an fflush causes the next seek to be
unoptimized (i.e. forces a system-level seek). This conforms
to the POSIX and SUSv3 standards. */
fp->_flags |= __SNPT;
_funlockfile (fp);
return 0;
}
if ((p = fp->_bf._base) == NULL)
{
/* Nothing to flush. */
_funlockfile (fp);
return 0;
}

View File

@ -359,6 +359,13 @@ dumb:
fp->_r = 0;
/* fp->_w = 0; *//* unnecessary (I think...) */
fp->_flags &= ~__SEOF;
/* Reset no-optimization flag after successful seek. The
no-optimization flag may be set in the case of a read
stream that is flushed which by POSIX/SUSv3 standards,
means that a corresponding seek must not optimize. The
optimization is then allowed if no subsequent flush
is performed. */
fp->_flags &= ~__SNPT;
_funlockfile (fp);
return 0;
}