changeset 15505:225d7e86ab78

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 <eblake@redhat.com>
author Eric Blake <eblake@redhat.com>
date Tue, 09 Aug 2011 15:18:31 -0600
parents b364a18ce87a
children 72af71b55124
files ChangeLog lib/fseeko.c
diffstat 2 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-09  Eric Blake  <eblake@redhat.com>
+
+	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  <bruno@clisp.org>
 
 	unictype/base: Fix interoperability with preinstalled libunistring.
--- 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.  */