$OpenBSD: patch-display_c,v 1.1 2007/10/26 21:38:24 jasper Exp $
--- display.c.orig	Wed Nov  6 23:59:38 1996
+++ display.c	Fri Oct 26 23:33:35 2007
@@ -27,7 +27,10 @@
  */
 
 #include <stdio.h>
-#include <alloca.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/time.h>
@@ -40,6 +43,7 @@
 #include <netinet/ip_icmp.h>
 #include <netinet/tcp.h>
 #include <netinet/udp.h>
+#include <arpa/inet.h>
 
 #include <sgtty.h>
 
@@ -59,8 +63,10 @@ static void write_ctos(); /* Client to server */
 static void write_stoc(); /* Server to Client */
 static void initialize_screen(); /* Clear screen, setup windows, etc */
 static void dump_handler();
+extern void cleanup_output();
 extern int ignore_user;
 
+void
 display_connection(input_filename, con_id)
 char *input_filename;
 int con_id;
@@ -108,7 +114,6 @@ int con_id;
   }
 
   pcap_close(pcp);
-  return;
 }
 
 char init_user=0;
@@ -136,15 +141,13 @@ u_char *p;
   struct ip *ip;
   struct tcphdr *tcph;
   u_char *abuf, *abuf2;
-  int flags, length;
+  int length;
   static struct timeval last_time;
   static int offset_set=0;
-  struct timeval ct;
 
   fd_set fdset;
   struct timeval timeout;
   char inchar;
-  char outbuf[64];
 
   /* tjk timing */
   static struct timeval session_start, cur_delta;
@@ -218,14 +221,14 @@ u_char *p;
     }
     
     for (;;) {
-      int sel_out;
       struct timeval t1,t2,t3;
 
       bcopy(subtract_timeval(&pkth->ts, &session_start),
 			&t1, sizeof(struct timeval));
       bcopy(subtract_timeval(&pkth->ts, &last_time),
 			&t2, sizeof(struct timeval));
-      last_time = pkth->ts;
+      last_time.tv_sec = pkth->ts.tv_sec;
+      last_time.tv_usec = pkth->ts.tv_usec;
 
 	  timeout = t2;
 
@@ -477,12 +480,10 @@ int length; /* length of p, 0 to do diffs, -1 to do co
 
 	if (length > 46) {
 	  len = 46;
-	  strncpy(s, p+(length-46), len); /* Get last 46 characters */
-	  *(s+len)=0;
+	  strlcpy(s, p+(length-46), len); /* Get last 46 characters */
 	} else {
 	  len = length;
-	  strncpy(s, p, len);
-	  *(s+len)=0;
+	  strlcpy(s, p, len);
 	}
 
 	mode=0;
@@ -561,8 +562,7 @@ int length; /* length of p, 0 to do diffs, -1 to do co
 	if (len == 46) {
 	  printf("\033[26;34H\033[7m%s\033[0m", new_buffer);
 	  former_buflen = 46;
-	  strncpy(former_buffer, printable, len);
-	  *(former_buffer+len)=0;
+	  strlcpy(former_buffer, printable, len);
 	} else {
 	  if ((former_buflen + len) > 46) {
 		diff = (former_buflen + len - 46);
@@ -572,17 +572,14 @@ int length; /* length of p, 0 to do diffs, -1 to do co
 		printf("\033[26;%dH", 34+former_buflen-(diff));
 		printf("\033[7m%s\033[0m", new_buffer);
 		former_buflen = 46;
-		strncpy(temp, former_buffer+diff, 46-diff);
-		*(temp+(46-diff))=0;
-		strcat(temp, printable, len);
-		*(temp+46)=0;
+		strlcpy(temp, former_buffer+diff, 46-diff);
+		strlcat(temp, printable, len);
 		strcpy(former_buffer, temp);
 	  } else {
 		printf("\033[26;%dH", 34+former_buflen);
 		printf("\033[7m%s\033[0m", new_buffer);
 		former_buflen += len;
-		strncat(former_buffer, printable, len);
-		*(former_buffer+former_buflen)=0;
+		strlcat(former_buffer, printable, len);
 	  }
 	}
   }
@@ -600,7 +597,7 @@ struct timeval *ts;
 char *p;
 int length;
 {
-  char *x, *y, *beg, value;
+  char *x, value, *beg = NULL;
   int i;
   int redraw_status=0;
   enum { STATE_NOTHING, STATE_ESCAPE, STATE_BRACKET, STATE_ARGUMENTS } state;
@@ -741,6 +738,7 @@ initialize_screen() /* Clear screen, setup windows, et
 static FILE *sfp=NULL, *cfp=NULL;
 static char dumpbase[1024];
 
+void
 dump_connection(input_filename, con_id)
 char *input_filename;
 int con_id;
@@ -754,7 +752,8 @@ int con_id;
   printf("Enter basename for output files (server side will append '.srv', client '.cli'\n");
   printf(":");
   fflush(stdout);
-  gets(dumpbase);
+  fgets(dumpbase, sizeof(dumpbase), stdin);
+  strtok(dumpbase, "\r\n");
 
   if ((pcp = pcap_open_offline(input_filename, ebuf)) == NULL) {
     fprintf(stderr, "Can't open input file: %s\n", ebuf);
@@ -798,8 +797,6 @@ int con_id;
   printf("NOTE: You may want to run:\n");
   printf("tr -d '\\015' <basename.srv     - and/or -\n");
   printf("tr '\\015' '\\012' <basename.cli\n");
-  
-  return;
 }
 
 static void
@@ -812,9 +809,7 @@ u_char *p;
   struct ip *ip;
   struct tcphdr *tcph;
   u_char *abuf, *abuf2;
-  int flags, length;
-  char inchar;
-  char outbuf[64];
+  int length;
   char buf[1024], buf2[1024];
 
   if (sfp==NULL) {
