summary refs log tree commit diff
path: root/libio/fileops.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-11-28 04:16:09 +0000
committerUlrich Drepper <drepper@redhat.com>1996-11-28 04:16:09 +0000
commitc66452515d7b4ebf6b0633735397db9a392a839e (patch)
tree7cf4dc82d4d675e61c61cf696f7d1007d1c467aa /libio/fileops.c
parent8a52392237c44cbbd1ffc62b164230e1159dfb76 (diff)
downloadglibc-c66452515d7b4ebf6b0633735397db9a392a839e.tar.gz
glibc-c66452515d7b4ebf6b0633735397db9a392a839e.tar.xz
glibc-c66452515d7b4ebf6b0633735397db9a392a839e.zip
update from main archive 961127 cvs/libc-961128
Thu Nov 28 03:11:11 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libio/fileops.c: Update from latest libg++.

	* sysdeps/unix/sysv/linux/init-first.c: Reformat copyright.

	* sysdeps/stub/libc-lock.h: Add __libc_lock_init_recursive.
	* libio/genops.c (_IO_init): Use __libc_lock_init_recursive
	instead of __libc_lock_init for streams.
	Reported by a sun <asun@zoology.washington.edu>.

	* sysdepsunix/sysv/linux/i386/brk.c: Reformat copyright.

	* sysdeps/generic/errno-loc.c: New file.  Generic definition of
	__errno_location function.
	* sysdeps/unix/sysv/linux/i386/sysdep.S: Remove definition of
	__errno_location.
	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=csu]: Add errno-loc
	to sysdep-routines.

	* sysdeps/unix/sysv/linux/configure: Add test for linuxthreads
	and crypt add-on and warn if not available.

Wed Nov 27 23:09:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* po/ko.po: Update from Bang Jun-Young <bangjy@nownuri.nowcom.co.kr>.

	* sysdeps/unix/sysv/linux/syscalls.list: Remove _llseek.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=misc] (routines): Add
	llseek.
	* sysdeps/unix/sysv/linux/llseek.c: New file.  Uses syscall.
	* sysdeps/unix/sysv/linux/i386/syscalls.list: Add __sys_llseek.
	* sysdeps/unix/sysv/linux/m68k/syscalls.list: Add __sys_llseek.
	Reported by HJ Lu <hjl@gnu.ai.mit.edu>.
	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add llseek.
	* sysdeps/unix/sysv/linux/alpha/llseek.S: Remove.  Generic syscall
	is enough.
	Patch by Richard Henderson <rth@tamu.edu>.

	* sysdeps/unix/sysv/linux/alpha/sys/io.h: Add prototypes for
	pciconfig_read and pciconfig_write.
	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add new syscalls
	pciconfig_read and pciconfig_write.

	* login/getutent_r.c: Fix several bugs in last change.
Diffstat (limited to 'libio/fileops.c')
-rw-r--r--libio/fileops.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/libio/fileops.c b/libio/fileops.c
index b4bd5ce7cd..1851d9a1fa 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -308,7 +308,15 @@ DEFUN(_IO_file_overflow, (f, ch),
 	  _IO_doallocbuf(f);
 	  _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
 	}
-      /* Otherwise must be currently reading. */
+      /* Otherwise must be currently reading.
+	 If _IO_read_ptr (and hence also _IO_read_end) is at the buffer end,
+	 logically slide the buffer forwards one block (by setting the
+	 read pointers to all point at the beginning of the block).  This
+	 makes room for subsequent output.
+	 Otherwise, set the read pointers to _IO_read_end (leaving that
+	 alone, so it can continue to correspond to the external position). */
+      if (f->_IO_read_ptr == f->_IO_buf_end)
+	f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
       f->_IO_write_ptr = f->_IO_read_ptr;
       f->_IO_write_base = f->_IO_write_ptr;
       f->_IO_write_end = f->_IO_buf_end;