Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Sep 2001 07:03:37 +0400
From:      "Andrey A. Chernov" <ache@nagual.pp.ru>
To:        Alfred Perlstein <bright@mu.org>
Cc:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/lib/libc/stdio setvbuf.c
Message-ID:  <20010903070334.A97368@nagual.pp.ru>
In-Reply-To: <20010902214528.J81307@elvis.mu.org>
References:  <200109030235.f832ZAg46853@freefall.freebsd.org> <20010902214528.J81307@elvis.mu.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Sep 02, 2001 at 21:45:28 -0500, Alfred Perlstein wrote:
> * Andrey A. Chernov <ache@FreeBSD.org> [010902 21:35] wrote:
> > ache        2001/09/02 19:35:10 PDT
> > 
> >   Modified files:
> >     lib/libc/stdio       setvbuf.c 
> >   Log:
> >   When __SOPT is cleared, clear __SOFF too.
> >   
> >   NOTE: original stdio bug.
> 
> What are you validating these changes against?  POSIX? Solaris? Linux?

Stdio try to optimize seeks internally to keep file offset in memory
without additional fp->_seek, commonly lseek call (and use __SOFF for it).
It can be done correctly only for regular files and when fp->_seek not
changed to non-standard function. Character devices (f.e. normal stdio)
often move pointer by themselfs, so keeping offset in memory for them
leads to incorrect offset. Stdio try to detect regular files with fp->seek
set to standard __seek and set __SOPT flag for them. It means that file
can be optimized. __SOFF is one sort of optimizations, it means we have
valid file offset in memory. When setvbuf.c clears __SOPT, no
optimizations allowed including __SOFF, so __SOFF must be removed too.

-- 
Andrey A. Chernov
http://ache.pp.ru/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010903070334.A97368>