Date: Thu, 29 Jul 2004 17:42:06 +0200 (CEST) From: Bernd Luevelsmeyer <bernd@heitec.net> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/69763: /usr/bin/tip strips hi-bit Message-ID: <200407291542.i6TFg6LY062260@ heitec.net> Resent-Message-ID: <200407291550.i6TFoLpG049625@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 69763 >Category: bin >Synopsis: /usr/bin/tip strips hi-bit >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Jul 29 15:50:21 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Bernd Luevelsmeyer >Release: FreeBSD 4.10-STABLE i386 >Organization: >Environment: System: FreeBSD 4.10-STABLE >Description: The tool /usr/bin/tip (a terminal program for serial lines) strips input and output to 7 bits. This makes it impossible to e.g. use german umlauts or accented characters. >How-To-Repeat: Connect to a remote system with tip, and type such characters or 'cat' a file that contains them. >Fix: Apply these two patches: --- usr.bin/tip/tip/tip.c.orig Sat Jun 2 10:08:24 2001 +++ usr.bin/tip/tip/tip.c Thu Jul 29 16:07:19 2004 @@ -231,10 +231,10 @@ tcgetattr (0, &otermios); ctermios = otermios; #ifndef _POSIX_SOURCE - ctermios.c_iflag = (IMAXBEL|IXANY|ISTRIP|IXON|BRKINT); + ctermios.c_iflag = (IMAXBEL|IXANY|IXON|BRKINT); ctermios.c_lflag = (PENDIN|IEXTEN|ISIG|ECHOCTL|ECHOE|ECHOKE); #else - ctermios.c_iflag = (ISTRIP|IXON|BRKINT); + ctermios.c_iflag = (IXON|BRKINT); ctermios.c_lflag = (PENDIN|IEXTEN|ISIG|ECHOE); #endif ctermios.c_cflag = (CLOCAL|HUPCL|CREAD|CS8); @@ -435,7 +435,8 @@ tipin() { int i; - char gch, bol = 1; + unsigned char gch; + char bol = 1; atexit(killchild); @@ -455,11 +456,11 @@ i = getchar(); if (i == EOF) break; - gch = i&0177; - if ((gch == character(value(ESCAPE))) && bol) { + gch = i; + if (((gch&0177) == character(value(ESCAPE))) && bol) { if (!(gch = escape())) continue; - } else if (!cumode && gch == character(value(RAISECHAR))) { + } else if (!cumode && (gch&0177) == character(value(RAISECHAR))) { boolean(value(RAISE)) = !boolean(value(RAISE)); continue; } else if (gch == '\r') { @@ -468,11 +469,11 @@ if (boolean(value(HALFDUPLEX))) printf("\r\n"); continue; - } else if (!cumode && gch == character(value(FORCE))) { + } else if (!cumode && (gch&0177) == character(value(FORCE))) { i = getchar(); if (i == EOF) break; - gch = i & 0177; + gch = i; } bol = any(gch, value(EOL)); if (boolean(value(RAISE)) && islower(gch)) --- usr.bin/tip/tip/tipout.c.orig Sat Jun 2 10:08:24 2001 +++ usr.bin/tip/tip/tipout.c Thu Jul 29 16:05:50 2004 @@ -158,8 +158,6 @@ } #define ALLSIGS sigmask(SIGEMT)|sigmask(SIGTERM)|sigmask(SIGIOT)|sigmask(SIGSYS) omask = sigblock(ALLSIGS); - for (cp = buf; cp < buf + cnt; cp++) - *cp &= 0177; if (write(1, buf, cnt) < 0) exit(1); if (boolean(value(SCRIPT)) && fscript != NULL) { >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200407291542.i6TFg6LY062260>