Fix running on big endian
RFC2217 options with one byte values were always sent with value = 0.
This commit is contained in:
@@ -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
|
||||
|
||||
+4
-2
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user