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,
|
extern void telnet_rfc2217_cfg(tn_ctx_t * tcc, int cmd,
|
||||||
const void *val, int nd);
|
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*/
|
/*RFC2217 modem state*/
|
||||||
#define TNS_STATE_CD 0x80
|
#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);
|
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)
|
if (!tcc->mode_rfc2217)
|
||||||
return;
|
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 mcr;
|
||||||
int val;
|
int val;
|
||||||
int res;
|
int res;
|
||||||
|
unsigned char byte;
|
||||||
|
unsigned int byte4;
|
||||||
|
|
||||||
DBG("%s: cmd=%s arg=%p ibuf=%p:%u obuf=:%u\n", __func__,
|
DBG("%s: cmd=%s arg=%p ibuf=%p:%u obuf=:%u\n", __func__,
|
||||||
_ioctl_name(cmd), arg, in_buf,
|
_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));
|
CHECK_BUF_IN(sizeof(struct termios));
|
||||||
{
|
{
|
||||||
speed_t speed;
|
speed_t speed;
|
||||||
int csize, par, sb;
|
unsigned char csize, par, sb;
|
||||||
|
|
||||||
memcpy(tio, in_buf, in_bufsz);
|
memcpy(tio, in_buf, in_bufsz);
|
||||||
|
|
||||||
speed = tio->c_cflag & (CBAUD | CBAUDEX);
|
speed = tio->c_cflag & (CBAUD | CBAUDEX);
|
||||||
val = htonl(baudrate(speed));
|
byte4 = htonl(baudrate(speed));
|
||||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_BAUDRATE, &val, 4);
|
telnet_rfc2217_cfg(tty->tn, TNS_SET_BAUDRATE, &byte4, 4);
|
||||||
|
|
||||||
if ((tio->c_cflag & CSIZE) == CS5)
|
if ((tio->c_cflag & CSIZE) == CS5)
|
||||||
csize = 5;
|
csize = 5;
|
||||||
@@ -787,6 +789,7 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg,
|
|||||||
break;
|
break;
|
||||||
case TCGETS:
|
case TCGETS:
|
||||||
CHECK_BUF_OUT(sizeof(struct termios));
|
CHECK_BUF_OUT(sizeof(struct termios));
|
||||||
|
ioctl(tty->fds[FD_SLAVE].fd, TCGETS, tio);
|
||||||
fuse_reply_ioctl(req, 0, tio, sizeof(struct termios));
|
fuse_reply_ioctl(req, 0, tio, sizeof(struct termios));
|
||||||
break;
|
break;
|
||||||
case TIOCINQ: /* Get the number of bytes in the input
|
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);
|
fuse_reply_ioctl(req, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
case TCIFLUSH:
|
case TCIFLUSH:
|
||||||
val = 1;
|
byte = 1;
|
||||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &val, 1);
|
telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1);
|
||||||
fuse_reply_ioctl(req, 0, 0, 0);
|
fuse_reply_ioctl(req, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
case TCOFLUSH:
|
case TCOFLUSH:
|
||||||
val = 2;
|
byte = 2;
|
||||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &val, 1);
|
telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1);
|
||||||
fuse_reply_ioctl(req, 0, 0, 0);
|
fuse_reply_ioctl(req, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
case TCIOFLUSH:
|
case TCIOFLUSH:
|
||||||
val = 3;
|
byte = 3;
|
||||||
telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &val, 1);
|
telnet_rfc2217_cfg(tty->tn, TNS_SET_PURGE, &byte, 1);
|
||||||
fuse_reply_ioctl(req, 0, 0, 0);
|
fuse_reply_ioctl(req, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
case TIOCMGET:
|
case TIOCMGET:
|
||||||
|
|||||||
Reference in New Issue
Block a user