mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 14:37:57 +00:00
291e04ee8f
When passing struct termios to ioctl TCGETS and TCSETS should be used instead of TCGETA and TCSETA, which are meant for the older struct termio. Should fix https://dev.openwrt.org/ticket/19012 Signed-off-by: Matti Laakso <malaakso@elisanet.fi> SVN-Revision: 44506
106 lines
3.2 KiB
Diff
106 lines
3.2 KiB
Diff
--- a/comgt.c
|
|
+++ b/comgt.c
|
|
@@ -30,7 +30,7 @@
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <signal.h>
|
|
-#include <termio.h>
|
|
+#include <termios.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
@@ -81,7 +81,7 @@ char token[MAXTOKEN]; /* For gettoken(
|
|
char scriptfile[MAXPATH]; /* Script file name */
|
|
char scriptfilepath[MAXPATH]; /* temp storage for full path */
|
|
BOOL verbose=0; /* Log actions */
|
|
-struct termio cons, stbuf, svbuf; /* termios: svbuf=before, stbuf=while */
|
|
+struct termios cons, stbuf, svbuf; /* termios: svbuf=before, stbuf=while */
|
|
int comfd=0; /* Communication file descriptor. Defaults to stdin. */
|
|
char msg[STRINGL]; /* Massage messages here */
|
|
int preturn,returns[MAXGOSUBS];
|
|
@@ -172,7 +172,7 @@ void dotestkey(void) {
|
|
|
|
/* Exit after resetting terminal settings */
|
|
void ext(long xtc) {
|
|
- ioctl(1, TCSETA, &cons);
|
|
+ ioctl(1, TCSETS, &cons);
|
|
exit(xtc);
|
|
}
|
|
|
|
@@ -920,24 +920,24 @@ BOOL getonoroff(void) {
|
|
void setcom(void) {
|
|
stbuf.c_cflag &= ~(CBAUD | CSIZE | CSTOPB | CLOCAL | PARENB);
|
|
stbuf.c_cflag |= (speed | bits | CREAD | clocal | parity | stopbits );
|
|
- if (ioctl(comfd, TCSETA, &stbuf) < 0) {
|
|
+ if (ioctl(comfd, TCSETS, &stbuf) < 0) {
|
|
serror("Can't ioctl set device",1);
|
|
}
|
|
}
|
|
|
|
void doset(void) {
|
|
- struct termio console;
|
|
+ struct termios console;
|
|
int a,b;
|
|
gettoken();
|
|
if(strcmp(token,"echo")==0) {
|
|
a=0;
|
|
if(getonoroff()) a=ECHO|ECHOE;
|
|
- if(ioctl(0, TCGETA, &console)<0) {
|
|
+ if(ioctl(0, TCGETS, &console)<0) {
|
|
serror("Can't ioctl FD zero!\n",2);
|
|
}
|
|
console.c_lflag &= ~(ECHO | ECHOE);
|
|
console.c_lflag |= a;
|
|
- ioctl(0, TCSETA, &console);
|
|
+ ioctl(0, TCSETS, &console);
|
|
}
|
|
else if(strcmp(token,"senddelay")==0) {
|
|
senddelay=10000L*getdvalue();
|
|
@@ -1224,7 +1224,7 @@ void doclose(void) {
|
|
if(strcmp(token,"hardcom")==0) {
|
|
if(comfd== -1) serror("Com device not open",1);
|
|
vmsg("Closing device");
|
|
- if (ioctl(comfd, TCSETA, &svbuf) < 0) {
|
|
+ if (ioctl(comfd, TCSETS, &svbuf) < 0) {
|
|
sprintf(msg,"Can't ioctl set device %s.\n",device);
|
|
serror(msg,1);
|
|
}
|
|
@@ -1266,12 +1266,12 @@ void opengt(void) {
|
|
ext(1);
|
|
}
|
|
}
|
|
- if (ioctl (comfd, TCGETA, &svbuf) < 0) {
|
|
+ if (ioctl (comfd, TCGETS, &svbuf) < 0) {
|
|
sprintf(msg,"Can't control %s, please try again.\n",device);
|
|
serror(msg,1);
|
|
}
|
|
setenv("COMGTDEVICE",device,1);
|
|
- ioctl(comfd, TCGETA, &stbuf);
|
|
+ ioctl(comfd, TCGETS, &stbuf);
|
|
speed=stbuf.c_cflag & CBAUD;
|
|
if (high_speed == 0) strcpy(cspeed,"115200");
|
|
else strcpy(cspeed,"57600");
|
|
@@ -1303,11 +1303,11 @@ void opendevice(void) {
|
|
}
|
|
else comfd=0;
|
|
|
|
- if (ioctl (comfd, TCGETA, &svbuf) < 0) {
|
|
+ if (ioctl (comfd, TCGETS, &svbuf) < 0) {
|
|
sprintf(msg,"Can't ioctl get device %s.\n",device);
|
|
serror(msg,1);
|
|
}
|
|
- ioctl(comfd, TCGETA, &stbuf);
|
|
+ ioctl(comfd, TCGETS, &stbuf);
|
|
speed=stbuf.c_cflag & CBAUD;
|
|
switch(speed) {
|
|
case B0: strcpy(cspeed,"0");break;
|
|
@@ -1553,7 +1553,7 @@ int main(int argc,char **argv) {
|
|
skip_default=0;
|
|
filep=NULL;
|
|
scriptspace=4096;
|
|
- ioctl(1, TCGETA, &cons);
|
|
+ ioctl(1, TCGETS, &cons);
|
|
if((script=( char *)malloc(scriptspace))==NULL) {
|
|
serror("Could not malloc()",3);
|
|
}
|