svn commit: r268987 - head/lib/libc/stdio
Andrey Chernov
ache at freebsd.org
Tue Jul 22 19:09:01 UTC 2014
On 22.07.2014 22:38, Pedro F. Giffuni wrote:
> Author: pfg
> Date: Tue Jul 22 18:37:59 2014
> New Revision: 268987
> URL: http://svnweb.freebsd.org/changeset/base/268987
>
> Log:
> Revert r268984:
> Check for __SAPP flag before calling sflush. This avoids
> performance degradation compared to the previous approach.
Thanx. In this version sflush which doing physical write is never
called, only _sseek (lseek) for __SAPP. Here is the test program, run it
several times and notice ftell position increased from time to time (or
not in our old version):
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen("testfile", "a");
rewind(fp);
fwrite("1", 1, 1, fp);
printf("%ld\n", ftell(fp));
fclose(fp);
}
It probably worth to be added to our test framework, but I completely
unaware how to do it.
>
> Submitted by: ache
> MFC after: 2 weeks
>
> Modified:
> head/lib/libc/stdio/ftell.c
>
> Modified: head/lib/libc/stdio/ftell.c
> ==============================================================================
> --- head/lib/libc/stdio/ftell.c Tue Jul 22 17:30:05 2014 (r268986)
> +++ head/lib/libc/stdio/ftell.c Tue Jul 22 18:37:59 2014 (r268987)
> @@ -97,8 +97,6 @@ _ftello(FILE *fp, fpos_t *offset)
> * Find offset of underlying I/O object, then
> * adjust for buffered bytes.
> */
> - if (__sflush(fp)) /* may adjust seek offset on append stream */
> - return (1);
> if (fp->_flags & __SOFF)
> pos = fp->_offset;
> else {
> @@ -120,6 +118,11 @@ _ftello(FILE *fp, fpos_t *offset)
> if (HASUB(fp))
> pos -= fp->_r; /* Can be negative at this point. */
> } else if ((fp->_flags & __SWR) && fp->_p != NULL) {
> + if (fp->_flags & __SAPP) {
> + pos = _sseek(fp, (fpos_t)0, SEEK_END);
> + if (pos == -1)
> + return (1);
> + }
> /*
> * Writing. Any buffered characters cause the
> * position to be greater than that in the
>
--
http://ache.vniz.net/
More information about the svn-src-all
mailing list