about summary refs log tree commit diff
path: root/libio
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-12-07 03:30:25 +0000
committerUlrich Drepper <drepper@redhat.com>1996-12-07 03:30:25 +0000
commita18f587da5a0a91bcd1307ed0f122ca2ce994c15 (patch)
tree174cca5dd1f842dff255d6491ff6677ac7772eab /libio
parent6b612c67093292a99a336fae38e459ee00927d0f (diff)
downloadglibc-a18f587da5a0a91bcd1307ed0f122ca2ce994c15.tar.gz
glibc-a18f587da5a0a91bcd1307ed0f122ca2ce994c15.tar.xz
glibc-a18f587da5a0a91bcd1307ed0f122ca2ce994c15.zip
update from main archive 961206
Sat Dec  7 03:24:36 1996  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Discard error message from test in test for
	bash-2.0.

	* io/getpw.c: Don't apply getcwd on user supplied buffer.
	Instead always use temporary buffer and only copy the result.
	Patch by HJ Lu.
	* stdlib/canonicalize.c: Likewise.

	* libio/fileops.c: Change comments according to libg++2.8b5.
	* libio/iosetvbuf.c: Follow change in libg++-2.8b5 to clear
	unbuffered flag.
	Reported by HJ Lu.

	* manual/nss.texi: Correct prototypes.

	* misc/syslog.c: Make reentrant.  Catch SIGPIPE signal to prevent
	crash if syslog daemon is restarted.

	* stdlib/rand_r.c: New file.  Implementation of POSIX.2 function
	rand_r.
	* stdlib/Makefile (routines): Add rand_r.

	* sysdeps/stub/libc-lock.h: Define __libc_lock_trylock and
	__libc_mutex_lock.

	* configure.in: Add --disable-sanity-check option.
	* sysdeps/unix/sysv/linux/configure.in: If linuxthreads or
	des-crypt are not available and --disbale-sanity-check is not
	given abort with a message.

Thu Dec  5 19:19:53 1996  Richard Henderson  <rth@tamu.edu>

	* posix/glob.c: Tests against STDC_HEADERS should also test
	__GNU_LIBRARY__.

Thu Dec  5 16:20:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/err.c (vwarn): Set errno again before using %m format.

Thu Dec  5 10:14:05 1996  Andreas Jaeger  <aj@arthur.pfalz.de>

	* grp/grp.h: Add declaration of __getgrent_r.

	* io/fts.c (fts_build): Remove "register" from variables dirbuf
	and dp since their address is needed.

	* sysdeps/posix/getcwd.c (__getcwd): Remove "register" from
	variable d since d's address is needed.

	* misc/tst-dirname.c (main): Provide prototype.
	* misc/ioctltst.c (main): Dito.

	* Makefile: Add gnu/lib-names.h to install-others before including
	Makerules.

Wed Dec  4 16:00:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/sys/socketvar.h: New file.  Simply use
	<sys/socket.h>.
	* sysdeps/unix/sysv/linux/Dist: Add sys/socketvar.h.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet)]: Add
	sys/socketvar.h to sysdep_headers.

	since the value might be outside the range of the `long int'.
Diffstat (limited to 'libio')
-rw-r--r--libio/fileops.c20
-rw-r--r--libio/iosetvbuf.c3
2 files changed, 15 insertions, 8 deletions
diff --git a/libio/fileops.c b/libio/fileops.c
index 1851d9a1fa..d3f4831e2d 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -45,21 +45,27 @@ extern int errno;
    is that of gptr(); in put mode that of pptr().
 
    The position in the buffer that corresponds to the position
-   in external file system is file_ptr().
-   This is normally _IO_read_end, except in putback mode,
+   in external file system is normally _IO_read_end, except in putback
+   mode, when it is _IO_save_end.
    when it is _IO_save_end.
    If the field _fb._offset is >= 0, it gives the offset in
    the file as a whole corresponding to eGptr(). (?)
 
    PUT MODE:
-   If a filebuf is in put mode, pbase() is non-NULL and equal to base().
-   Also, epptr() == ebuf().
-   Also, eback() == gptr() && gptr() == egptr().
-   The un-flushed character are those between pbase() and pptr().
+   If a filebuf is in put mode, then all of _IO_read_ptr, _IO_read_end,
+   and _IO_read_base are equal to each other.  These are usually equal
+   to _IO_buf_base, though not necessarily if we have switched from
+   get mode to put mode.  (The reason is to maintain the invariant
+   that _IO_read_end corresponds to the external file position.)
+   _IO_write_base is non-NULL and usually equal to _IO_base_base.
+   We also have _IO_write_end == _IO_buf_end, but only in fully buffered mode.
+   The un-flushed character are those between _IO_write_base and _IO_write_ptr.
+
    GET MODE:
    If a filebuf is in get or putback mode, eback() != egptr().
    In get mode, the unread characters are between gptr() and egptr().
    The OS file position corresponds to that of egptr().
+
    PUTBACK MODE:
    Putback mode is used to remember "excess" characters that have
    been sputbackc'd in a separate putback buffer.
@@ -72,7 +78,7 @@ extern int errno;
    The OS position corresponds to that of save_egptr().
 
    LINE BUFFERED OUTPUT:
-   During line buffered output, pbase()==base() && epptr()==base().
+   During line buffered output, _IO_write_base==base() && epptr()==base().
    However, ptr() may be anywhere between base() and ebuf().
    This forces a call to filebuf::overflow(int C) on every put.
    If there is more space in the buffer, and C is not a '\n',
diff --git a/libio/iosetvbuf.c b/libio/iosetvbuf.c
index 3776330a88..8ba9753efc 100644
--- a/libio/iosetvbuf.c
+++ b/libio/iosetvbuf.c
@@ -42,7 +42,7 @@ _IO_setvbuf (fp, buf, mode, size)
   switch (mode)
     {
     case _IOFBF:
-      fp->_IO_file_flags &= ~_IO_LINE_BUF;
+      fp->_IO_file_flags &= ~_IO_LINE_BUF|_IO_UNBUFFERED;
       if (buf == NULL)
 	{
 	  if (fp->_IO_buf_base == NULL)
@@ -72,6 +72,7 @@ _IO_setvbuf (fp, buf, mode, size)
 	}
       break;
     case _IOLBF:
+      fp->_IO_file_flags &= ~_IO_UNBUFFERED;
       fp->_IO_file_flags |= _IO_LINE_BUF;
       if (buf == NULL)
 	{