mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	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);
 | |
|    }
 |