$NetBSD: patch-av,v 1.6 2020/08/18 02:17:26 gutteridge Exp $

--- icb/unix.c.orig	1995-02-24 21:20:31.000000000 +0000
+++ icb/unix.c
@@ -7,20 +7,23 @@
 #include <stdio.h>
 #include "icb.h"
 #include "externs.h"
+#include <limits.h>
 #include <pwd.h>
-#include <sys/dir.h>
+#include <time.h>
+#include <dirent.h>
 
 #undef stty
 #undef gtty
 
-#ifndef SYSV
-
-#ifdef linux
-#include <bsd/sgtty.h>
-#else
 #include <sgtty.h>
-#endif
 
+#if defined(__linux__) || defined(__NetBSD__) || defined(__sun)
+#include <termios.h>
+#define TTYSTRUCT termios
+#define stty(fd,buf) tcsetattr((fd),TCSANOW,(buf))
+#define gtty(fd,buf) tcgetattr((fd),(buf))
+#else
+#ifndef SYSV
 #define TTYSTRUCT sgttyb
 #define stty(fd,buf) ioctl((fd),TIOCSETN,(buf))
 #define gtty(fd,buf) ioctl((fd),TIOCGETP,(buf))
@@ -30,6 +33,7 @@
 #define stty(fd,buf) ioctl((fd),TCSETA,(buf))
 #define gtty(fd,buf) ioctl((fd),TCGETA,(buf))
 #endif /* SYSV */
+#endif /* TIOCSETA */
 
 char *getlogin();
 
@@ -65,13 +69,16 @@ gettime()
 
 /* set line buffering for an open file pointer */
 /* output will be flushed every newline */
+static char buf[1024];
 
 linebuffer(fp)
 FILE *fp;
 {
-#ifndef SYSV
+#ifndef _IOLBF
+	setvbuf(fp, buf, _IOLBF, sizeof(buf));
+#else
 	setlinebuf(fp);
-#endif /* SYSV */
+#endif
 }
 
 
@@ -79,13 +86,13 @@ FILE *fp;
 pushback(c)
 char c;
 {
-#ifndef SYSV
+#ifdef TIOCSTI
 	if (ioctl(0, TIOCSTI, &c) < 0)
 		perror("TIOCSTI ioctl failed");
-#else /* SYSV */
+#else
 	if (ungetc(c,stdin) == EOF)
 		perror("ungetc() failed");
-#endif /* SYSV */
+#endif
 }
 
 
@@ -94,25 +101,25 @@ char c;
 
 getterm()
 {
-#ifndef SYSV
+#if !defined(TCSETA) && !defined(TCSANOW)
 	struct ltchars lt;
-#endif /* SYSV */
+#endif
 	/* get tty settings */
 	if (gtty(0,&origtty) < 0) {
 		badttyinfo++;
 		ttyinfo.erase = '\b';	/* ^H */
 		ttyinfo.kill = '\025';	/* ^U */
 	} else {
-#ifndef SYSV
-		ttyinfo.erase = origtty.sg_erase;
-		ttyinfo.kill = origtty.sg_kill;
-#else /* SYSV */
+#if defined(TCSETA) || defined(TCSANOW)
 		ttyinfo.erase = origtty.c_cc[VERASE];
 		ttyinfo.kill = origtty.c_cc[VKILL];
-#endif /* SYSV */
+#else
+		ttyinfo.erase = origtty.sg_erase;
+		ttyinfo.kill = origtty.sg_kill;
+#endif
 	}
 
-#ifndef SYSV
+#if !defined(TCSETA) && !defined(TCSANOW)
 	/* get local special chars */
  	if (ioctl(0, TIOCGLTC, &lt) < 0) {
 		ttyinfo.redraw = '\022'; /* ^R */
@@ -121,10 +128,10 @@ getterm()
 		ttyinfo.redraw = lt.t_rprntc;
 		ttyinfo.werase = lt.t_werasc;
 	}
-#else /* SYSV */
+#else
 	ttyinfo.redraw = '\022'; /* ^R */
 	ttyinfo.werase = '\027'; /* ^W */
-#endif /* SYSV */
+#endif
 
 	/* get the current window size */
 	getwinsize();
@@ -134,7 +141,7 @@ getterm()
 
 /* set up terminal modes optimal for icb */
 
-icbterm()
+void icbterm(void)
 {
 	struct TTYSTRUCT tty;
 
@@ -145,14 +152,14 @@ icbterm()
 	bcopy((char *)&origtty, (char *)&tty, (unsigned)sizeof(struct TTYSTRUCT));
 
 	/* turn on cbreak - turn off echo */
-#ifndef SYSV
-	tty.sg_flags |= CBREAK;
-	tty.sg_flags &= ~ECHO;
-#else /* SYSV */
+#if defined(TCSETA) || defined(TCSANOW)
 	tty.c_lflag  &= ~ICANON;
 	tty.c_cc[VEOF] = 1;
 	tty.c_lflag &= ~ECHO;
-#endif /* SYSV */
+#else 
+	tty.sg_flags |= CBREAK;
+	tty.sg_flags &= ~ECHO;
+#endif
 
 	echomode = 0;
 	/* set the new flags */
@@ -165,7 +172,7 @@ icbterm()
 
 /* restore term to original settings */
 
-restoreterm()
+void restoreterm(void)
 {
 	if (badttyinfo)
 		return;
@@ -206,7 +213,11 @@ char *s;
 	struct passwd *pw;
 	char login[17];
 	char *p = login;
+#ifdef NAME_MAX
+	static char path[NAME_MAX + 1];
+#else
 	static char path[MAXNAMLEN+1];
+#endif
 
 	/* has to start with a tilde */
 	if (*s++ != '~')
@@ -258,11 +269,11 @@ echo()
 	}
 
 	/* turn on echo */
-#ifndef SYSV
-	tty.sg_flags |= ECHO;
-#else /* SYSV */
+#if defined(TCSETA) || defined(TCSANOW)
 	tty.c_lflag  |= ECHO;
-#endif /* SYSV */
+#else
+	tty.sg_flags |= ECHO;
+#endif
 
 	echomode = 1;
 
@@ -287,11 +298,11 @@ noecho()
 	}
 
 	/* turn off echo */
-#ifndef SYSV
-	tty.sg_flags &= ~ECHO;
-#else /* SYSV */
+#if defined(TCSETA) || defined(TCSANOW)
 	tty.c_lflag  &= ~ECHO;
-#endif /* SYSV */
+#else
+	tty.sg_flags &= ~ECHO;
+#endif
 
 	echomode = 0;