about summary refs log tree commit diff
path: root/libio/oldfileops.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-10-25 09:11:53 +0000
committerUlrich Drepper <drepper@redhat.com>1998-10-25 09:11:53 +0000
commit4a582094c28099144dac9528174ce7c0be72c0fd (patch)
tree647f7c06d86df0e42887c2db744578bf71a991fc /libio/oldfileops.c
parent88455219c104124f82cc11d038b17cb249c4b6bd (diff)
downloadglibc-4a582094c28099144dac9528174ce7c0be72c0fd.tar.gz
glibc-4a582094c28099144dac9528174ce7c0be72c0fd.tar.xz
glibc-4a582094c28099144dac9528174ce7c0be72c0fd.zip
Update.
1998-10-25  Ulrich Drepper  <drepper@cygnus.com>

	* include/features.h: Define __USE_POSIS199506 is _POSIX_C_SOURCE is
	greater or equal than 199506L.

	* sysdeps/generic/bits/types.h (__fd_set): Define element as fds_bits
	only is __USE_XOPEN.  Otherwise use __fds_bits.
	* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/types.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
	* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
	* sysdeps/unix/sysv/sysv4/solaris2/bits/types.h: Likewise.

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* locale/programs/charmap.c (parse_charmap): Accept tok_string
	for <code_set_name>.

1998-10-25  H.J. Lu  <hjl@gnu.org>

	* locale/programs/ld-ctype.c (ctype_finish): Also check
	<space>.

1998-10-25  Ulrich Drepper  <drepper@cygnus.com>

	* signal/signal.h: Include bits/sigthread.h only if __USE_POSIX199506.

	* sysdeps/unix/sysv/linux/bits/types.h: Include pthreadtypes.h only
	if __USE_POSIX199506 or __USE_UNIX98.

1998-10-24 22:34 -0400  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* string/bits/string2.h: Inline strdup+friends only if
	__USE_MISC || __USE_GNU (prevents namespace pollution).

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (LOCK_SH,
	LOCK_EX, LOCK_NB, LOCK_UN): Protect with __USE_BSD.
	* sysdeps/unix/sysv/linux/i386/bits/fcntl.h (LOCK_SH, LOCK_EX,
	LOCK_NB, LOCK_UN): Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/fcntl.h (LOCK_SH, LOCK_EX,
	LOCK_NB, LOCK_UN): Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/fcntl.h (LOCK_SH, LOCK_EX,
	LOCK_NB, LOCK_UN): Likewise.
	* sysdeps/unix/sysv/linux/bits/fcntl.h (LOCK_SH, LOCK_EX,
	LOCK_NB, LOCK_UN): Likewise.

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* libio/ioseekoff.c (_IO_seekoff): Check the valid dir value.

	* libio/rewind.c (rewind): Clear the error.

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* grp/grp.h (getgrent_r, getgrgid_r, getgrnam_r): Add "__" to
	"buffer".

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* sysdeps/unix/sysv/linux/alpha/bits/time.h (timeval): Protect
	with __need_timeval.
	* sysdeps/unix/sysv/linux/mips/bits/time.h (timeval): Likewise.
	* sysdeps/unix/sysv/linux/bits/time.h (timeval): Likewise.

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* signal/signal.h (timespec, siginfo_t, sigwaitinfo, sigtimedwait,
	sigqueue): Protect with __USE_POSIX199309.

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* time/time.h (timespec): Protect with __USE_POSIX199309 instead of
	__USE_POSIX.

1998-10-24  H.J. Lu  <hjl@gnu.org>

	* libio/fileops.c (_IO_new_file_seekoff): Always resync with
	the kernel file offset.
	* libio/oldfileops.c (_IO_old_file_seekoff): Likewise.
Diffstat (limited to 'libio/oldfileops.c')
-rw-r--r--libio/oldfileops.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libio/oldfileops.c b/libio/oldfileops.c
index 59de8d8818..e0f8e65255 100644
--- a/libio/oldfileops.c
+++ b/libio/oldfileops.c
@@ -514,7 +514,7 @@ _IO_old_file_seekoff (fp, offset, dir, mode)
 	      _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
 			fp->_IO_read_end);
 	      _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
-	      return offset;
+	      goto resync;
 	    }
 #ifdef TODO
 	    /* If we have streammarkers, seek forward by reading ahead. */
@@ -524,7 +524,7 @@ _IO_old_file_seekoff (fp, offset, dir, mode)
 		  - (fp->_IO_read_ptr - fp->_IO_read_base);
 		if (ignore (to_skip) != to_skip)
 		  goto dumb;
-		return offset;
+		goto resync;
 	      }
 #endif
 	}
@@ -534,7 +534,7 @@ _IO_old_file_seekoff (fp, offset, dir, mode)
 	  if (!_IO_in_backup (fp))
 	    _IO_switch_to_backup_area (fp);
 	  gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
-	  return offset;
+	  goto resync;
 	}
 #endif
     }
@@ -590,6 +590,16 @@ _IO_old_file_seekoff (fp, offset, dir, mode)
       _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
     }
   return result;
+
+resync:
+  /* We need to do it since it is possible that the file offset in
+     the kernel may be changed behind our back. It may happen when
+     we fopen a file and then do a fork. One process may access the
+     the file and the kernel file offset will be changed. */
+  if (fp->_old_offset >= 0)
+    _IO_SYSSEEK (fp, fp->_old_offset, 0);
+
+  return offset;
 }
 
 _IO_ssize_t