Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Jun 2008 08:56:13 +0200 (CEST)
From:      Ed Schouten <ed@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/124466: [Patch] japanese/mh: port to termios
Message-ID:  <20080611065613.EC5171CCAC@palm.hoeg.nl>
Resent-Message-ID: <200806110700.m5B708GM074901@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         124466
>Category:       ports
>Synopsis:       [Patch] japanese/mh: port to termios
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jun 11 07:00:08 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Ed Schouten
>Release:        FreeBSD 6.3-STABLE i386
>Organization:
>Environment:
System: FreeBSD palm.hoeg.nl 6.3-STABLE FreeBSD 6.3-STABLE #0: Wed Jun 4 08:56:01 CEST 2008 ed@palm.hoeg.nl:/usr/obj/usr/src/sys/PALM i386
>Description:
The japanese/mh port is one of the last ports that still depends on
COMPAT_43TTY, because it uses the sgtty programming interface. We'd
better port it to the POSIX termios interface. The source code already
contains code for SysV termio, which makes it easier to port.
>How-To-Repeat:
>Fix:
Apply the following patch:

--- japanese/mh/files/patch-uip:msh.c
+++ japanese/mh/files/patch-uip:msh.c
@@ -0,0 +1,17 @@
+--- uip/msh.c
++++ uip/msh.c
+@@ -17,14 +17,7 @@
+ #include <ctype.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#ifndef	SYS5
+-#include <sgtty.h>
+-#else	/* SYS5 */
+-#include <termio.h>
+-#ifndef	NOIOCTLH
+ #include <sys/ioctl.h>
+-#endif	/* NOIOCTLH */
+-#endif	/* SYS5 */
+ #include <pwd.h>
+ #include <setjmp.h>
+ #include <signal.h>
--- japanese/mh/files/patch-uip:prompter.c
+++ japanese/mh/files/patch-uip:prompter.c
@@ -0,0 +1,100 @@
+--- uip/prompter.c
++++ uip/prompter.c
+@@ -6,15 +6,7 @@
+ #include "../h/mh.h"
+ #include <stdio.h>
+ #include <errno.h>
+-#ifndef	SYS5
+-#include <sgtty.h>
+-#else	/* SYS5 */
+-#include <sys/types.h>
+-#include <termio.h>
+-#ifndef	NOIOCTLH
+-#include <sys/ioctl.h>
+-#endif	/* NOIOCTLH */
+-#endif	/* SYS5 */
++#include <termios.h>
+ #if defined(BSD42) || defined(SVR4)
+ #include <setjmp.h>
+ #endif	/* BSD42 || SVR4 */
+@@ -71,19 +63,10 @@
+ extern int  errno;
+ 
+ 
+-#ifndef	SYS5
+-#define	ERASE	sg.sg_erase
+-#define	KILL	sg.sg_kill
+-static struct sgttyb    sg;
+-
+-#define	INTR	tc.t_intrc
+-static struct tchars    tc;
+-#else	/* SYS5 */
+ #define	ERASE	sg.c_cc[VERASE]
+ #define	KILL	sg.c_cc[VKILL]
+ #define	INTR	sg.c_cc[VINTR]
+-static struct termio    sg;
+-#endif	/* SYS5 */
++static struct termios    sg;
+ 
+ 
+ static TYPESIG	intrser ();
+@@ -209,29 +192,14 @@
+     (void) chmod (tmpfil, 0600);
+ 
+     if (killp || erasep) {
+-#ifndef	SYS5
+-	int    serase,
+-	       skill;
+-#else	/* SYS5 */
+-	char   serase,
+-	       skill;
+-#endif	/* SYS5 */
+-
+-#ifndef	SYS5
+-	(void) ioctl (0, TIOCGETP, (char *) &sg);
+-	(void) ioctl (0, TIOCGETC, (char *) &tc);
+-#else	/* SYS5 */
+-	(void) ioctl(0, TCGETA, &sg);
+-#endif	/* SYS5 */
++	cc_t serase, skill;
++
++	(void) tcgetattr(0, &sg);
+ 	skill = KILL;
+ 	serase = ERASE;
+ 	KILL = killp ? chrcnv (killp) : skill;
+ 	ERASE = erasep ? chrcnv (erasep) : serase;
+-#ifndef	SYS5
+-	(void) ioctl (0, TIOCSETN, (char *) &sg);
+-#else	/* SYS5 */
+-	(void) ioctl(0, TCSETAW, &sg);
+-#endif	/* SYS5 */
++	(void) tcsetattr(0, TCSADRAIN, &sg);
+ 
+ 	chrdsp ("erase", ERASE);
+ 	chrdsp (", kill", KILL);
+@@ -273,11 +241,7 @@
+ 		    if (i == -1) {
+ abort: ;
+ 			if (killp || erasep)
+-#ifndef	SYS5
+-			    (void) ioctl (0, TIOCSETN, (char *) &sg);
+-#else	/* SYS5 */
+-			    (void) ioctl (0, TCSETA, &sg);
+-#endif	/* SYS5 */
++			    (void) tcsetattr (0, TCSANOW, &sg);
+ 			(void) unlink (tmpfil);
+ 			done (1);
+ 		    }
+@@ -365,11 +329,7 @@
+ /*  */
+ 
+     if (killp || erasep)
+-#ifndef	SYS5
+-	(void) ioctl (0, TIOCSETN, (char *) &sg);
+-#else	/* SYS5 */
+-	(void) ioctl (0, TCSETAW, &sg);
+-#endif	/* SYS5 */
++	(void) tcsetattr (0, TCSANOW, &sg);
+ 
+     if ((fdi = open (tmpfil, 0)) == NOTOK)
+ 	adios (tmpfil, "unable to re-open");
--- japanese/mh/files/patch-uip:trmsbr.c
+++ japanese/mh/files/patch-uip:trmsbr.c
@@ -0,0 +1,51 @@
+--- uip/trmsbr.c
++++ uip/trmsbr.c
+@@ -5,19 +5,8 @@
+ 
+ #include "../h/mh.h"
+ #include <stdio.h>
+-#ifndef	SYS5
+-#include <sgtty.h>
+-#if	defined(ULTRIX) && !defined(BSD43)
+-#undef	TIOCGWINSZ
+-#endif
+-#else	/* SYS5 */
+-#include <sys/types.h>
+-#include <termio.h>
+-#ifndef	NOIOCTLH
+ #include <sys/ioctl.h>
+-#endif	/* NOIOCTLH */
+-#undef	TIOCGWINSZ
+-#endif	/* SYS5 */
++#include <termios.h>
+ 
+ 
+ #if	BUFSIZ<2048
+@@ -58,11 +47,7 @@
+                    *term;
+     char   *cp,
+ 	    myterm[TXTSIZ];
+-#ifndef	SYS5
+-    struct sgttyb   sg;
+-#else	/* SYS5 */
+-    struct termio   sg;
+-#endif	/* SYS5 */
++    struct termios  sg;
+     static int  inited = 0;
+ 
+     if (inited++)
+@@ -71,13 +56,7 @@
+     if ((term = getenv ("TERM")) == NULL || tgetent (myterm, term) <= OK)
+ 	return;
+ 
+-#ifndef	SYS5
+-    ospeed = ioctl (fileno (stdout), TIOCGETP, (char *) &sg) != NOTOK
+-		? sg.sg_ospeed : 0;
+-#else	/* SYS5 */
+-    ospeed = ioctl (fileno (stdout), TCGETA, &sg) != NOTOK
+-		? sg.c_cflag & CBAUD : 0;
+-#endif	/* SYS5 */
++    ospeed = tcgetattr (fileno (stdout), &sg) != NOTOK ? cfgetospeed(&sg) : 0;
+ 
+     HC = tgetflag ("hc");
+ 
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080611065613.EC5171CCAC>