libstdc++/9533: Regression: Can't read from tty with ifstream

Pétur Runólfsson peturr02@ru.is
Mon Mar 3 13:16:00 GMT 2003


The following reply was made to PR libstdc++/9533; it has been noted by GNATS.

From: =?iso-8859-1?Q?P=E9tur_Run=F3lfsson?= <peturr02@ru.is>
To: <paolo@gcc.gnu.org>,
	<gcc-bugs@gcc.gnu.org>,
	<nobody@gcc.gnu.org>,
	<gcc-gnats@gcc.gnu.org>
Cc: <libstdc++@gcc.gnu.org>
Subject: RE: libstdc++/9533: Regression: Can't read from tty with ifstream
Date: Mon, 3 Mar 2003 13:09:06 -0000

 >     Patching: indeed, reverting this hunk of 6746 commit:
 >    =20
 >     +
 >     +	    // Set input to nonblocking for fifos.
 >     +	    if (__mode & ios_base::in)
 >     +	      fcntl(this->fd(), F_SETFL, O_NONBLOCK);
 >     +
 >    =20
 >     Fixes the problem without regressing on 6746.
 
 Interesting. I would have thought that removing this would
 cause the call to underflow() in basic_filebuf::open() to
 block, causing the test case to wait for input *before*
 printing out the prompt (this seems to be the reason that
 non-blocking input is specified).
 
 So far, this is what I think is going on:
 * non-blocking input is specified so underflow() doesn't
   block (which is wrong, underflow() should block).
 * underflow() must not block because it is called from
   open() which must not block.
 * open() calls underflow() so that in_avail() will return
   non-zero after open() (libstdc++/6746).
 
 However, I don't see how calling underflow() from open()
 fixes libstdc++/6746. Unless I am missing something,
 readsome will return up to BUFSIZ characters, and then
 return 0 until the end of time.
 
 Petur



More information about the Gcc-prs mailing list