From 4a582094c28099144dac9528174ce7c0be72c0fd Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 25 Oct 1998 09:11:53 +0000 Subject: Update. 1998-10-25 Ulrich Drepper * 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 * locale/programs/charmap.c (parse_charmap): Accept tok_string for . 1998-10-25 H.J. Lu * locale/programs/ld-ctype.c (ctype_finish): Also check . 1998-10-25 Ulrich Drepper * 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 * string/bits/string2.h: Inline strdup+friends only if __USE_MISC || __USE_GNU (prevents namespace pollution). 1998-10-24 H.J. Lu * 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 * libio/ioseekoff.c (_IO_seekoff): Check the valid dir value. * libio/rewind.c (rewind): Clear the error. 1998-10-24 H.J. Lu * grp/grp.h (getgrent_r, getgrgid_r, getgrnam_r): Add "__" to "buffer". 1998-10-24 H.J. Lu * 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 * signal/signal.h (timespec, siginfo_t, sigwaitinfo, sigtimedwait, sigqueue): Protect with __USE_POSIX199309. 1998-10-24 H.J. Lu * time/time.h (timespec): Protect with __USE_POSIX199309 instead of __USE_POSIX. 1998-10-24 H.J. Lu * libio/fileops.c (_IO_new_file_seekoff): Always resync with the kernel file offset. * libio/oldfileops.c (_IO_old_file_seekoff): Likewise. --- libio/oldfileops.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'libio/oldfileops.c') 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 -- cgit v1.2.3