TTYStream::isPending() VS istream::peek() - 0:1

Tarmo Kuuse <[email protected]> Thu, 06 Apr 2006 15:44:29 +0300
Newsgroups gmane.comp.gnu.bayonne.devel
Message-ID <[email protected]>
Hi!

I am using the GNU Common C++ library (version 1.3.25) class TTYSession 
to implement a simple XModem program. A very elegant abstraction, I must 
admit.

During an XModem session I wish to peek at a character in the incoming 
byte stream. To do that, I call the method peek(), inherited from 
std::istream.

However, this breaks the method TTYStream::isPending().

If the serial device buffer contains 1 unread byte, isPending() returns 
"true";
However, if peek() is called before isPending(), isPending returns 
"false" - regardless of the fact that unread data is in the buffer.

To me, this behaviour seems rather undesirable. I wish to check (in 
different functions) if data is available for reading with isPending() 
and occasionally take a peek at that data without actually reading it.

I took a quick look at your code starting at "serial.c:988". You use 
poll() to check for incoming bytes. The istream::peek() method probably 
marks the byte as "read" and poll() does not detect it.

Is it possible to either override istream::peek() or rewrite 
TTYStream::isPending() so that it becomes possible to peek at data 
before doing isPending() check on it?

-- 
Best Regards,
Tarmo Kuuse

Software developer
Oskando Ltd