From 314e4b1b9926085dff6452c250a40435d08f5622 Mon Sep 17 00:00:00 2001 From: Kim Woelders Date: Tue, 23 Oct 2018 07:08:07 +0200 Subject: [PATCH] Flushing ioctl fixups - Propagate TCFLSH to slave. - Actually send flush requests to server. - TCIFLUSH, TCOFLUSH, and TCIOFLUSH are not ioctls but TCFLSH arguments. - Re-enable read polls if input is flushed. --- ttynvt.c | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/ttynvt.c b/ttynvt.c index 30a3e4b..1027f83 100644 --- a/ttynvt.c +++ b/ttynvt.c @@ -665,9 +665,6 @@ static const char *_ioctl_name(int cmd) CASE(TIOCINQ); CASE(TIOCOUTQ); CASE(TCFLSH); - CASE(TCIFLUSH); - CASE(TCOFLUSH); - CASE(TCIOFLUSH); CASE(TIOCMGET); CASE(TIOCMBIS); CASE(TIOCMBIC); @@ -784,6 +781,9 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, ioctl(tty->fds[FD_SLAVE].fd, cmd, tio); + if (cmd == TCSETSF) + tty->n_fds = 3; /* Re-enable polling of Slave */ + fuse_reply_ioctl(req, 0, 0, 0); } break; @@ -805,33 +805,23 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, fuse_reply_ioctl(req, 0, &val, sizeof(int)); break; case TCFLSH: - if (arg == TCIFLUSH) + switch ((size_t) arg) { - /*todo */ + default: + case TCIFLUSH: + byte = 1; + tty->n_fds = 3; /* Re-enable polling of Slave */ + break; + case TCOFLUSH: + byte = 2; + break; + case TCIOFLUSH: + byte = 3; + tty->n_fds = 3; /* Re-enable polling of Slave */ + break; } - else if ((size_t) arg == TCOFLUSH) - { - /*todo */ - } - else if ((size_t) arg == TCIOFLUSH) - { - /*todo */ - } - fuse_reply_ioctl(req, 0, 0, 0); - break; - case TCIFLUSH: - byte = 1; - telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1); - fuse_reply_ioctl(req, 0, 0, 0); - break; - case TCOFLUSH: - byte = 2; - telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1); - fuse_reply_ioctl(req, 0, 0, 0); - break; - case TCIOFLUSH: - byte = 3; telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1); + ioctl(tty->fds[FD_SLAVE].fd, TCFLSH, arg); fuse_reply_ioctl(req, 0, 0, 0); break; case TIOCMGET: