# HG changeset patch # User Eric Blake # Date 1312924711 21600 # Node ID 225d7e86ab780785aced31d3b865dd9719da8684 # Parent b364a18ce87a11aff8a0e50b8cb64778a55d127b fseeko: fix bug on glibc Commit 1074f45959f had a bug on glibc that caused the unit test to fail, but instead of figuring why the failure was happening, we instead added a partial hack to avoid the problem in the scenario covered by the testsuite. https://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00171.html But that hack doesn't cover all scenarios, and papers over the real issue: if you fopen()/ftell()/fseek(,0,SEEK_END)/ftell(), then the stream should be positioned at the same place as the underlying fd, even though no I/O occurred, and without requiring an fflush() in the middle. * lib/fseeko.c (fseeko): Set stream offset to match fd offset. Reported by John W. Eaton. Signed-off-by: Eric Blake diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-08-09 Eric Blake + + fseeko: fix bug on glibc + * lib/fseeko.c (fseeko): Set stream offset to match fd offset. + Reported by John W. Eaton. + 2011-08-08 Bruno Haible unictype/base: Fix interoperability with preinstalled libunistring. diff --git a/lib/fseeko.c b/lib/fseeko.c --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -111,6 +111,7 @@ #if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags &= ~_IO_EOF_SEEN; + fp->_offset = pos; #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # if defined __CYGWIN__ /* fp_->_offset is typed as an integer. */