Date: Wed, 11 Jun 2008 14:13:36 +0200 (CEST) From: Ed Schouten <ed@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/124475: [Patch] misc/splitvt: don't use sgtty Message-ID: <20080611121336.ECAD31CC1A@palm.hoeg.nl> Resent-Message-ID: <200806111220.m5BCK2CU029808@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 124475 >Category: ports >Synopsis: [Patch] misc/splitvt: don't use sgtty >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 12:20:01 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 splitvt port still uses sgtty. This means it depends on the COMPAT_43TTY kernel option. We can easily port it to termios, which means we can eventually remove sgtty from the FreeBSD operating system. >How-To-Repeat: >Fix: The following patch changes splitvt to use termios instead of sgtty: --- misc/splitvt/files/patch-misc.c +++ misc/splitvt/files/patch-misc.c @@ -1,11 +1,112 @@ --- misc.c.orig Wed Dec 15 10:28:45 2004 +++ misc.c Sat Oct 7 14:34:28 2006 -@@ -5,6 +5,8 @@ - #include <fcntl.h> - #include <stdio.h> +@@ -7,10 +7,13 @@ + #include <stdlib.h> + #include <string.h> #include <signal.h> +#include <stdlib.h> +#include <string.h> ++#define HAVE_TERMIO_H #ifdef HAVE_TERMIO_H +-#include <termio.h> ++#include <termios.h> + #else + #include <sys/ioctl.h> + #endif /* HAVE_TERMIO_H */ +@@ -431,13 +434,13 @@ + /* Get the modes of the controlling tty and save them. Saves + ttymodes in tty_mode and returns -1 if ioctl fails. */ + +-struct termio tty_mode; /* Save tty mode here */ ++struct termios tty_mode; /* Save tty mode here */ + static int tty_init=0; + + int tty_getmode(fd) + int fd; + { +- d_zero((char *)&tty_mode, sizeof(struct termio)); ++ d_zero((char *)&tty_mode, sizeof(struct termios)); + tty_init=1; /* Flag: we have initialized the tty_mode struct */ + + if ( ! isatty(fd) ) +@@ -447,7 +450,7 @@ + fprintf(stderr, "Getting tty modes for tty_mode.\r\n"); + #endif + +- if (ioctl(fd, TCGETA, (char *) &tty_mode) < 0) ++ if (tcgetattr(fd, &tty_mode) < 0) + { + #ifdef DEBUG + perror("tty_getmode(): ioctl error"); +@@ -464,14 +467,14 @@ + int tty_sane(fd) + int fd; + { +- struct termio temp_mode; ++ struct termios temp_mode; + + if ( ! isatty(fd) ) + return(0); + + if ( ! tty_init ) + { +- if (ioctl(fd, TCGETA, (char *) &tty_mode) < 0) ++ if (tcgetattr(fd, &tty_mode) < 0) + return(-1); + } + +@@ -491,7 +494,7 @@ + temp_mode.c_cc[VEOF]=('D'^64); + + /* TCSETAW is important for letting tty input drain. */ +- if ( ioctl(fd, TCSETAW, (char *)&temp_mode) < 0 ) ++ if ( tcsetattr(fd, TCSADRAIN, &temp_mode) < 0 ) + { + #ifdef DEBUG + perror("Can't set tty modes"); +@@ -508,7 +511,7 @@ + int tty_raw(fd) + int fd; /* of tty device */ + { +- struct termio temp_mode; ++ struct termios temp_mode; + + if ( ! tty_init ) + return(-1); +@@ -516,7 +519,7 @@ + if ( ! isatty(fd) ) + return(0); + +- if ( ioctl(fd, TCGETA, (char *)&temp_mode) < 0 ) ++ if ( tcgetattr(fd, &temp_mode) < 0 ) + return(-1); + + #ifdef SEVEN_BIT +@@ -524,14 +527,14 @@ + #else + temp_mode.c_iflag=(IGNBRK); /* turn off all input control */ + #endif +- temp_mode.c_oflag &= ~(OLCUC | ONLCR | OCRNL | ONLRET); ++ temp_mode.c_oflag &= ~(ONLCR | OCRNL | ONLRET); + /* disable output post-processing */ + temp_mode.c_lflag = 0; + temp_mode.c_cc[VMIN]=1; /* 1 or more chars satisfy read */ + temp_mode.c_cc[VTIME]=0; /* 10'ths of seconds between chars */ + + /* TCSETAW is important for letting tty input drain. */ +- if (ioctl(fd, TCSETAW, (char *) &temp_mode) < 0) ++ if (tcsetattr(fd, TCSADRAIN, &temp_mode) < 0) + return(-1); + return(0); + } +@@ -550,7 +553,7 @@ + return(0); + + /* TCSETAW is important for letting tty input drain. */ +- if (ioctl(fd, TCSETAW, (char *) &tty_mode) < 0) ++ if (tcsetattr(fd, TCSADRAIN, &tty_mode) < 0) + return(-1); + return(0); + } --- misc/splitvt/files/patch-vttest.c +++ misc/splitvt/files/patch-vttest.c @@ -1,6 +1,54 @@ --- vttest.c.orig Sat Oct 7 15:38:17 2006 +++ vttest.c Sat Oct 7 15:40:43 2006 -@@ -87,9 +87,13 @@ +@@ -15,8 +15,9 @@ + #include <sys/types.h> + #include <stdio.h> + #include <fcntl.h> ++#define HAVE_TERMIO_H + #ifdef HAVE_TERMIO_H +-#include <termio.h> ++#include <termios.h> + #else + #include <setjmp.h> + #include <signal.h> +@@ -49,15 +50,15 @@ + { + char buff[512]; + int x=0, w, rc=0, fd; +- struct termio ttold, ttraw; ++ struct termios ttold, ttraw; + + /* Set the terminal in a raw mode */ + if ( (fd=open("/dev/tty", O_RDWR, 0666)) < 0 ) + return(0); + +- if ( ioctl(fd, TCGETA, (char *)&ttold) < 0 ) ++ if ( tcgetattr(fd, &ttold) < 0 ) + return(0); +- (void) ioctl(fd, TCGETA, (char *)&ttraw); ++ (void) tcgetattr(fd, &ttraw); + + #ifdef HAVE_TERMIO_H + #ifdef SEVEN_BIT +@@ -65,7 +66,7 @@ + #else + ttraw.c_iflag=(IGNBRK); /* turn off all input control */ + #endif /* SEVEN_BIT */ +- ttraw.c_oflag &= ~(OLCUC | ONLCR | OCRNL | ONLRET); ++ ttraw.c_oflag &= ~(ONLCR | OCRNL | ONLRET); + /* disable output post-processing */ + ttraw.c_lflag = 0; + ttraw.c_cc[VMIN]=0; /* 1 or more chars satisfy read */ +@@ -75,7 +76,7 @@ + ttraw.sg_flags &= ~ECHO; /* turn ECHO off */ + #endif /* HAVE_TERMIO_H */ + +- if (ioctl(fd, TCSETAW, (char *)&ttraw) < 0) ++ if (tcsetattr(fd, TCSADRAIN, &ttraw) < 0) + return(0); + + write(fd,"\033[c", 3); /* Vt100 test: ESC [ c */ +@@ -87,9 +88,13 @@ setjmp(alarm_buf); #endif while ( !alarmed && (x < 20) ) { @@ -15,3 +63,12 @@ buff[x]='\0'; /* For printing, if we desire. */ if ( buff[0] == '\033' ) /* An escape sequence? :) */ rc=1; +@@ -98,7 +103,7 @@ + alarm(0); + signal(SIGALRM, SIG_DFL); + #endif +- (void) ioctl(fd, TCSETAW, (char *)&ttold); ++ (void) tcsetattr(fd, TCSADRAIN, &ttold); + (void) close(fd); + + #ifdef not_defined /* Print out the response for debugging */ >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080611121336.ECAD31CC1A>