From: Eric Blake Date: Tue, 9 Aug 2011 21:18:31 +0000 (-0600) Subject: fseeko: fix bug on glibc X-Git-Tag: v0.1~2021 X-Git-Url: http://erislabs.net/gitweb/?p=gnulib.git;a=commitdiff_plain;h=a769adbf87bdfe54b94da0a285fa9b8db45d5aa5 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 index 7824c846b..0917f5e65 100644 --- 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 index 1546f1bf5..80ca1e001 100644 --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -111,6 +111,7 @@ fseeko (FILE *fp, off_t offset, int whence) #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. */