Fix running on big endian

RFC2217 options with one byte values were always sent with value = 0.
This commit is contained in:
Kim Woelders
2018-10-22 11:09:12 +02:00
parent 85394b243e
commit effca015a8
3 changed files with 17 additions and 12 deletions
+1 -1
View File
@@ -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
View File
@@ -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);
}
+12 -9
View File
@@ -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: