ttynvt_ioctl(): Cleanups around TCSET.. handling
Avoid nested switches and unnecessary block level.
This commit is contained in:
+55
-65
@@ -803,76 +803,66 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg,
|
||||
case TCSETSF:
|
||||
case TCSETSW:
|
||||
case TCSETS:
|
||||
/* BEWARE of termios/termios2 buf structure difference! */
|
||||
CHECK_BUF_IN(sizeof(struct termios));
|
||||
memcpy(tio, in_buf, in_bufsz);
|
||||
byte4 = htonl(_tio_baud(tio));
|
||||
goto do_tcset;
|
||||
case TCSETSF2:
|
||||
case TCSETSW2:
|
||||
case TCSETS2:
|
||||
CHECK_BUF_IN(sizeof(struct termios2));
|
||||
memcpy(tio, in_buf, in_bufsz);
|
||||
byte4 = htonl(_tio2_baud(tio));
|
||||
goto do_tcset;
|
||||
do_tcset:
|
||||
/* BEWARE of termios/termios2 buf structure difference! */
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_BAUDRATE, &byte4, 4);
|
||||
|
||||
byte = _tio_csize(tio);
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_DATASIZE, &byte, 1);
|
||||
|
||||
byte = _tio_parity(tio);
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_PARITY, &byte, 1);
|
||||
|
||||
byte = _tio_stopb(tio);
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_STOPSIZE, &byte, 1);
|
||||
|
||||
if (tio->c_cflag & CRTSCTS)
|
||||
{
|
||||
switch (cmd)
|
||||
{
|
||||
case TCSETSF:
|
||||
case TCSETSW:
|
||||
case TCSETS:
|
||||
CHECK_BUF_IN(sizeof(struct termios));
|
||||
memcpy(tio, in_buf, in_bufsz);
|
||||
byte4 = htonl(_tio_baud(tio));
|
||||
break;
|
||||
case TCSETSF2:
|
||||
case TCSETSW2:
|
||||
case TCSETS2:
|
||||
CHECK_BUF_IN(sizeof(struct termios2));
|
||||
memcpy(tio, in_buf, in_bufsz);
|
||||
byte4 = htonl(_tio2_baud(tio));
|
||||
break;
|
||||
}
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_BAUDRATE, &byte4, 4);
|
||||
|
||||
byte = _tio_csize(tio);
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_DATASIZE, &byte, 1);
|
||||
|
||||
byte = _tio_parity(tio);
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_PARITY, &byte, 1);
|
||||
|
||||
byte = _tio_stopb(tio);
|
||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_STOPSIZE, &byte, 1);
|
||||
|
||||
if (tio->c_cflag & CRTSCTS)
|
||||
{
|
||||
tty->master_suspended = (tty->smcr & TIOCM_CTS) ? 0 : 1;
|
||||
telnet_rfc2217_ctl(tty->tn, TNS_CTL_CTSRTS);
|
||||
}
|
||||
else
|
||||
{
|
||||
tty->master_suspended = 0;
|
||||
telnet_rfc2217_ctl(tty->tn, TNS_CTL_NOFLOW);
|
||||
}
|
||||
|
||||
if (!(tty->cmcr & TIOCM_DTR) && _tio_baud(tio) != 0)
|
||||
{
|
||||
tty->cmcr |= TIOCM_DTR;
|
||||
telnet_rfc2217_ctl(tty->tn, TNS_CTL_DTR_ON);
|
||||
}
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case TCSETSF:
|
||||
case TCSETSW:
|
||||
case TCSETS:
|
||||
_show_termios("TCSETS", tio);
|
||||
break;
|
||||
case TCSETSF2:
|
||||
case TCSETSW2:
|
||||
case TCSETS2:
|
||||
_show_termios2("TCSETS2", tio);
|
||||
break;
|
||||
}
|
||||
ioctl(tty->fds[FD_SLAVE].fd, cmd, tio);
|
||||
|
||||
if (cmd == TCSETSF || cmd == TCSETSF2)
|
||||
tty->slave_suspended = 0; /* Re-enable polling of Slave */
|
||||
|
||||
fuse_reply_ioctl(req, 0, 0, 0);
|
||||
tty->master_suspended = (tty->smcr & TIOCM_CTS) ? 0 : 1;
|
||||
telnet_rfc2217_ctl(tty->tn, TNS_CTL_CTSRTS);
|
||||
}
|
||||
else
|
||||
{
|
||||
tty->master_suspended = 0;
|
||||
telnet_rfc2217_ctl(tty->tn, TNS_CTL_NOFLOW);
|
||||
}
|
||||
|
||||
if (!(tty->cmcr & TIOCM_DTR) && _tio_baud(tio) != 0)
|
||||
{
|
||||
tty->cmcr |= TIOCM_DTR;
|
||||
telnet_rfc2217_ctl(tty->tn, TNS_CTL_DTR_ON);
|
||||
}
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case TCSETSF:
|
||||
case TCSETSW:
|
||||
case TCSETS:
|
||||
_show_termios("TCSETS", tio);
|
||||
break;
|
||||
case TCSETSF2:
|
||||
case TCSETSW2:
|
||||
case TCSETS2:
|
||||
_show_termios2("TCSETS2", tio);
|
||||
break;
|
||||
}
|
||||
ioctl(tty->fds[FD_SLAVE].fd, cmd, tio);
|
||||
|
||||
if (cmd == TCSETSF || cmd == TCSETSF2)
|
||||
tty->slave_suspended = 0; /* Re-enable polling of Slave */
|
||||
|
||||
fuse_reply_ioctl(req, 0, 0, 0);
|
||||
break;
|
||||
case TCGETS:
|
||||
CHECK_BUF_OUT(sizeof(struct termios));
|
||||
|
||||
Reference in New Issue
Block a user