* libio/fileops.c (_IO_file_seekoff_mmap): When just examining the
authorRoland McGrath <roland@gnu.org>
Wed, 24 Jul 2002 09:35:24 +0000 (09:35 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 24 Jul 2002 09:35:24 +0000 (09:35 +0000)
position, calculate it to take into account an active pushback buffer.

* libio/Makefile (tests): Add bug-ungetc.
* libio/bug-ungetc.c: New file.

ChangeLog
libio/fileops.c

index b4795a8..8c64850 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2002-07-24  Roland McGrath  <roland@frob.com>
+
+       * libio/fileops.c (_IO_file_seekoff_mmap): When just examining the
+       position, calculate it to take into account an active pushback buffer.
+
+       * libio/Makefile (tests): Add bug-ungetc.
+       * libio/bug-ungetc.c: New file.
+
 2002-07-23  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/generic/libc-tls.c: New file.
index 2079495..fa4c8e0 100644 (file)
@@ -922,8 +922,12 @@ _IO_file_seekoff_mmap (fp, offset, dir, mode)
 {
   _IO_off64_t result;
 
+  /* If we are only interested in the current position, calculate it and
+     return right now.  This calculation does the right thing when we are
+     using a pushback buffer, but in the usual case has the same value as
+     (fp->_IO_read_ptr - fp->_IO_buf_base).  */
   if (mode == 0)
-    dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
+    return fp->_offset - (fp->_IO_read_end - fp->_IO_read_ptr);
 
   switch (dir)
     {
@@ -943,10 +947,6 @@ _IO_file_seekoff_mmap (fp, offset, dir, mode)
     /* No negative offsets are valid.  */
     return EOF;
 
-  /* If we are only interested in the current position we've found it now.  */
-  if (mode == 0)
-    return offset;
-
   result = _IO_SYSSEEK (fp, offset, 0);
   if (result < 0)
     return EOF;