From patchwork Thu Feb 19 17:15:26 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matti Laakso X-Patchwork-Id: 441695 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id BE77E14012A for ; Fri, 20 Feb 2015 04:15:57 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 8FDC828C66B; Thu, 19 Feb 2015 18:15:43 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 60E7A28C668 for ; Thu, 19 Feb 2015 18:15:37 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .elisanet. - helo: .vs14.mail.saunalahti. - helo-domain: .saunalahti.) FROM/MX_MATCHES_HELO(DOMAIN)=-2; rate: -8.5 Received: from vs14.mail.saunalahti.fi (vs14.mail.saunalahti.fi [62.142.117.201]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Thu, 19 Feb 2015 18:15:35 +0100 (CET) Received: from vams (localhost [127.0.0.1]) by vs14.mail.saunalahti.fi (Postfix) with SMTP id 93802740082; Thu, 19 Feb 2015 19:15:38 +0200 (EET) Received: from gw01.mail.saunalahti.fi (gw01.mail.saunalahti.fi [195.197.172.115]) by vs14.mail.saunalahti.fi (Postfix) with ESMTP id 63F67740082; Thu, 19 Feb 2015 19:15:38 +0200 (EET) Received: from Orion.lan (a88-115-217-74.elisa-laajakaista.fi [88.115.217.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by gw01.mail.saunalahti.fi (Postfix) with ESMTPSA id 4AB0140048; Thu, 19 Feb 2015 19:15:36 +0200 (EET) From: Matti Laakso To: openwrt-devel@lists.openwrt.org Date: Thu, 19 Feb 2015 19:15:26 +0200 Message-Id: <1424366126-16802-1-git-send-email-malaakso@elisanet.fi> X-Mailer: git-send-email 2.1.0 Cc: Matti Laakso Subject: [OpenWrt-Devel] [PATCH] comgt: Use TCGETS and TCSETS ioctls for struct termios X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" 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 --- package/network/utils/comgt/Makefile | 2 +- .../network/utils/comgt/patches/002-termios.patch | 78 +++++++++++++++++++++- .../utils/comgt/patches/004-check_tty.patch | 24 +++---- 3 files changed, 90 insertions(+), 14 deletions(-) diff --git a/package/network/utils/comgt/Makefile b/package/network/utils/comgt/Makefile index 500365a..8fcf54e 100644 --- a/package/network/utils/comgt/Makefile +++ b/package/network/utils/comgt/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=comgt PKG_VERSION:=0.32 -PKG_RELEASE:=24 +PKG_RELEASE:=25 PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz PKG_SOURCE_URL:=@SF/comgt diff --git a/package/network/utils/comgt/patches/002-termios.patch b/package/network/utils/comgt/patches/002-termios.patch index 3649f3c..08f22d1 100644 --- a/package/network/utils/comgt/patches/002-termios.patch +++ b/package/network/utils/comgt/patches/002-termios.patch @@ -18,7 +18,23 @@ int comfd=0; /* Communication file descriptor. Defaults to stdin. */ char msg[STRINGL]; /* Massage messages here */ int preturn,returns[MAXGOSUBS]; -@@ -926,7 +926,7 @@ void setcom(void) { +@@ -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) { @@ -27,3 +43,63 @@ 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); + } diff --git a/package/network/utils/comgt/patches/004-check_tty.patch b/package/network/utils/comgt/patches/004-check_tty.patch index b81b051..fb1d9af 100644 --- a/package/network/utils/comgt/patches/004-check_tty.patch +++ b/package/network/utils/comgt/patches/004-check_tty.patch @@ -12,8 +12,8 @@ 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 (tty && ioctl(comfd, TCSETA, &stbuf) < 0) { +- if (ioctl(comfd, TCSETS, &stbuf) < 0) { ++ if (tty && ioctl(comfd, TCSETS, &stbuf) < 0) { serror("Can't ioctl set device",1); } } @@ -21,8 +21,8 @@ if(strcmp(token,"hardcom")==0) { if(comfd== -1) serror("Com device not open",1); vmsg("Closing device"); -- if (ioctl(comfd, TCSETA, &svbuf) < 0) { -+ if (tty && ioctl(comfd, TCSETA, &svbuf) < 0) { +- if (ioctl(comfd, TCSETS, &svbuf) < 0) { ++ if (tty && ioctl(comfd, TCSETS, &svbuf) < 0) { sprintf(msg,"Can't ioctl set device %s.\n",device); serror(msg,1); } @@ -30,19 +30,19 @@ ext(1); } } -- if (ioctl (comfd, TCGETA, &svbuf) < 0) { +- if (ioctl (comfd, TCGETS, &svbuf) < 0) { + if (isatty (comfd)) + tty=1; + else + tty=0; -+ if (tty && ioctl (comfd, TCGETA, &svbuf) < 0) { ++ if (tty && 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); + if (tty) -+ ioctl(comfd, TCGETA, &stbuf); ++ ioctl(comfd, TCGETS, &stbuf); speed=stbuf.c_cflag & CBAUD; if (high_speed == 0) strcpy(cspeed,"115200"); else strcpy(cspeed,"57600"); @@ -51,18 +51,18 @@ } else comfd=0; - -- if (ioctl (comfd, TCGETA, &svbuf) < 0) { +- if (ioctl (comfd, TCGETS, &svbuf) < 0) { + if (isatty (comfd)) + tty=1; + else + tty=0; -+ if (tty && ioctl (comfd, TCGETA, &svbuf) < 0) { ++ if (tty && 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); + if (tty) -+ ioctl(comfd, TCGETA, &stbuf); ++ ioctl(comfd, TCGETS, &stbuf); speed=stbuf.c_cflag & CBAUD; switch(speed) { case B0: strcpy(cspeed,"0");break;