Incorrect behavior in TIOCINQ ioctl
Åke Rehnman
ake.rehnman@gmail.com
Thu Feb 27 21:39:00 GMT 2020
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
More information about the Cygwin
mailing list