Hi,

I recently ran in to some troubles with the TIOCINQ ioctl. I am wondering if the cygwin implementation is correct... It seems if there were any existing framing overrun errors etc etc  before calling the TIOCINQ ioctl it is returning an error (EINVAL). Reading through linux implmentation of TIOCINQ does simply return number of pending chars without any clearing or checking for errors.

I suggest the whole if (ev & CE_FRAME  ...... ) is removed.

Excerpt from fhandler_serial.cc:

/* ioctl: */
int
fhandler_serial::ioctl (unsigned int cmd, void *buf)
{
.
.
  if (!ClearCommError (get_handle (), &ev, &st))
    {
      __seterrno ();
      res = -1;
    }
.
.
.
     case TIOCINQ:
       if (ev & CE_FRAME || ev & CE_IOE || ev & CE_OVERRUN || ev & CE_RXOVER
       || ev & CE_RXPARITY)
     {
       set_errno (EINVAL);    /* FIXME: Use correct errno */
       res = -1;
     }
     else
        ipbuf = st.cbInQue;
     break;



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to