4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-01 03:50:28 +08:00

Cygwin: ioctl: TIOCINQ: always return number of chars in the inbound queue

So far ioctl(TIOCINQ) could end up returning -1 with errno set to EINVAL
if a non-zero device error mask has been returned by ClearCommError.
This doesn't reflect Linux behaviour, which always returns the number of
chars in the inbound queue, independent of any I/O error condition.
EINVAL was a pretty weird error code to use in this scenario, too.

Fix this by dropping all checking for device errors in the TIOCINQ
case.  Just return the number of chars in the inbound queue.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2020-03-02 17:02:51 +01:00 committed by Ken Brown
parent e668097b6d
commit c43952da4e
2 changed files with 4 additions and 8 deletions

View File

@ -519,13 +519,6 @@ fhandler_serial::ioctl (unsigned int cmd, void *buf)
}
break;
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;
case TIOCGWINSZ:

View File

@ -9,3 +9,6 @@ Bug Fixes:
- Fix a segfault when starting, e.g., mintty from a bash in a console
running xterm emulation.
Addresses: https://cygwin.com/ml/cygwin/2020-02/msg00197.html
- Fix TIOCINQ to always return number of inbound chars if available.
Addresses: https://cygwin.com/ml/cygwin/2020-02/msg00258.html