This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Redboot: net_io_getc_nonblock not setting return value?


On Fri, Feb 09, 2001 at 05:52:23PM +0000, Jonathan Larmour wrote:

> >    160  static cyg_bool
> >    161  net_io_getc_nonblock(void* __ch_data, cyg_uint8* ch)
> >    162  {
> >    163      if (_net_io_getc_nonblock(__ch_data, ch)) {
> >    164          if (*ch == TELNET_IAC) {
> >    165              cyg_uint8 esc;
> >    166              // Telnet escape - need to read/handle more
> >    167              while (!_net_io_getc_nonblock(__ch_data, &esc)) ;
> >    168              if (esc == TELNET_IP) {
> >    169                  // Special case for ^C == Interrupt Process
> >    170                  *ch = 0x03;
> >    171                  // Just in case the other end needs synchronizing
> >    172                  net_io_putc(__ch_data, TELNET_IAC);
> >    173                  net_io_putc(__ch_data, TELNET_WONT);
> >    174                  net_io_putc(__ch_data, TELNET_TM);
> >    175                  net_io_flush();
> >    176                  return true;
> >    177              }
> >    178              if (esc == TELNET_DO) {
> >    179                  // Telnet DO option
> >    180                  while (!_net_io_getc_nonblock(__ch_data, &esc)) ;
> >    181                  // Respond with WONT option
> >    182                  net_io_putc(__ch_data, TELNET_IAC);
> >    183                  net_io_putc(__ch_data, TELNET_WONT);
> >    184                  net_io_putc(__ch_data, esc);
> >    185                  return false;  // Ignore this whole thing!
> >    186              }
> >    187          }
> >    188      } else {
> >    189          return false;
> >    190      }
> >    191  }
> > 
> > Should there be a "return true;" either between lines 187/188
> > or just before the final brace at line 191?
> 
> It should probably just have a default return false at the end. i.e. just
> 
> >    187          }
> >    188      }
> >    189      return false;
> >    191  }
> 
> I'll change it.

I'm confused.  Why is it false and not true?  How would reading
a normal character ever return a true status?

My brain can't handle things nested too deeply -- especially w/
K&R brace placement ;).  I ended up fixing my copy like this:

static cyg_bool
net_io_getc_nonblock(void* __ch_data, cyg_uint8* ch)
{
	cyg_uint8 esc;
	
	if (!_net_io_getc_nonblock(__ch_data, ch))
		return false;

	if (*ch != TELNET_IAC)
		return true;
	  
	// Telnet escape - need to read/handle more

	while (!_net_io_getc_nonblock(__ch_data, &esc)) ;
	
	if (esc == TELNET_IP) {
		// Special case for ^C == Interrupt Process
		*ch = 0x03;  
		// Just in case the other end needs synchronizing
		net_io_putc(__ch_data, TELNET_IAC);
		net_io_putc(__ch_data, TELNET_WONT);
		net_io_putc(__ch_data, TELNET_TM);
		net_io_flush();
		return true;
	}
	else if (esc == TELNET_DO) {
		// Telnet DO option
		while (!_net_io_getc_nonblock(__ch_data, &esc)) ;                
		// Respond with WONT option
		net_io_putc(__ch_data, TELNET_IAC);
		net_io_putc(__ch_data, TELNET_WONT);
		net_io_putc(__ch_data, esc);
		return false;  // Ignore this whole thing!
	}

	return false;
}


-- 
Grant Edwards
grante@visi.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]