diff --git a/telnet.h b/telnet.h index 8ec3339..27d8700 100644 --- a/telnet.h +++ b/telnet.h @@ -42,7 +42,7 @@ extern void telnet_rfc2217_handle_opt(tn_ctx_t * tcc, int opt, extern void telnet_rfc2217_cfg(tn_ctx_t * tcc, int cmd, const void *val, int nd); -extern void telnet_rfc2217_ctl(tn_ctx_t * tcc, int cmd); +extern void telnet_rfc2217_ctl(tn_ctx_t * tcc, unsigned int val); /*RFC2217 modem state*/ #define TNS_STATE_CD 0x80 diff --git a/telnet_rfc2217.c b/telnet_rfc2217.c index 94d23ef..c6ab363 100644 --- a/telnet_rfc2217.c +++ b/telnet_rfc2217.c @@ -43,10 +43,12 @@ void telnet_rfc2217_cfg(tn_ctx_t * tcc, int cmd, const void *val, int nd) telnet_set_opt(tcc, TNO_CPCO, cmd, val, nd); } -void telnet_rfc2217_ctl(tn_ctx_t * tcc, int cmd) +void telnet_rfc2217_ctl(tn_ctx_t * tcc, unsigned int val) { + unsigned char byte = val; + if (!tcc->mode_rfc2217) return; - telnet_set_opt(tcc, TNO_CPCO, TNS_SET_CONTROL, &cmd, 1); + telnet_set_opt(tcc, TNO_CPCO, TNS_SET_CONTROL, &byte, 1); } diff --git a/ttynvt.c b/ttynvt.c index b36242b..30a3e4b 100644 --- a/ttynvt.c +++ b/ttynvt.c @@ -707,6 +707,8 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, int mcr; int val; int res; + unsigned char byte; + unsigned int byte4; DBG("%s: cmd=%s arg=%p ibuf=%p:%u obuf=:%u\n", __func__, _ioctl_name(cmd), arg, in_buf, @@ -720,13 +722,13 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, CHECK_BUF_IN(sizeof(struct termios)); { speed_t speed; - int csize, par, sb; + unsigned char csize, par, sb; memcpy(tio, in_buf, in_bufsz); speed = tio->c_cflag & (CBAUD | CBAUDEX); - val = htonl(baudrate(speed)); - telnet_rfc2217_cfg(tty->tn, TNS_SET_BAUDRATE, &val, 4); + byte4 = htonl(baudrate(speed)); + telnet_rfc2217_cfg(tty->tn, TNS_SET_BAUDRATE, &byte4, 4); if ((tio->c_cflag & CSIZE) == CS5) csize = 5; @@ -787,6 +789,7 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, break; case TCGETS: CHECK_BUF_OUT(sizeof(struct termios)); + ioctl(tty->fds[FD_SLAVE].fd, TCGETS, tio); fuse_reply_ioctl(req, 0, tio, sizeof(struct termios)); break; case TIOCINQ: /* Get the number of bytes in the input @@ -817,18 +820,18 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, fuse_reply_ioctl(req, 0, 0, 0); break; case TCIFLUSH: - val = 1; - telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &val, 1); + byte = 1; + telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1); fuse_reply_ioctl(req, 0, 0, 0); break; case TCOFLUSH: - val = 2; - telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &val, 1); + byte = 2; + telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1); fuse_reply_ioctl(req, 0, 0, 0); break; case TCIOFLUSH: - val = 3; - telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &val, 1); + byte = 3; + telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1); fuse_reply_ioctl(req, 0, 0, 0); break; case TIOCMGET: