summaryrefslogtreecommitdiff
path: root/devel/xxgdb/files/patch-calldbx.c
blob: 966a60557d1fbaf95044653a96295acc8341fce8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
--- calldbx.c.orig	1995-06-19 15:11:00.000000000 -0700
+++ calldbx.c	2014-03-26 12:20:00.741924675 -0700
@@ -74,8 +74,16 @@
 #include <string.h>
 #include <fcntl.h>
 #include "global.h"
-#if !(defined(OLDSUNOS) || defined(BSD))
-#include <termio.h>
+#if !(defined(OLDSUNOS) || defined(BSD)) || defined(__FreeBSD__)
+#include <termios.h>
+#include <sys/param.h>
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 900007
+#define NEW_FREEBSD_PTYS
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <termios.h>
+#include <libutil.h>
+#endif
 #else
 #include <sgtty.h>
 #endif
@@ -116,6 +124,7 @@
 char            iowintty[] = "/dev/ttyp0";
 int             iowinpid = 0;
 #endif /* CREATE_IO_WINDOW */
+#ifndef NEW_FREEBSD_PTYS
 /*
  *  Xdbx talks to dbx through a pseudo terminal which is a pair of master
  *  and slave devices: /dev/pty?? and /dev/tty??, where ?? goes from p0 to
@@ -137,13 +146,17 @@
 
 #ifndef sco
 	for (c='p'; c<'t'; c++) {
+#ifdef __FreeBSD__
+	for (i=0; i<32; i++) {
+#else
 	for (i=0; i<16; i++) {
+#endif
 #else
 	c = 'p';
 	for (i=0; i<8; i++) {
 #endif
 	    pty[8] = c;
-	    pty[9] = "0123456789abcdef"[i];
+	    pty[9] = "0123456789abcdefghijklmnopqrstuv"[i];
 	    if ((master = open(pty, O_RDWR)) >= 0) 
 		return (master); 
 	}
@@ -194,6 +207,7 @@
     return slave;
 #endif /* SVR4 */
 }
+#endif /* NEW_FREEBSD_PTYS */
 
 #ifdef CREATE_IO_WINDOW 
 /* use a separate io window to talk to gdb, so program output is not confused with gdb output. */
@@ -246,8 +260,8 @@
 /*
  * (JBL)10MAY91 : use sgttyb if generic BSD
  */
-#if !(defined(OLDSUNOS) || defined(BSD))
-    struct termio Termio;
+#if !(defined(OLDSUNOS) || defined(BSD)) || defined(__FreeBSD__)
+    struct termios Termio;
 #else
     struct sgttyb Termio;
 #endif
@@ -261,8 +275,10 @@
 
 #ifdef GDB	/* for GDB, we use XXGDB_DEBUGGER instead */
     debugger = (char *) getenv("XXGDB_DEBUGGER");	/* first looks up env var */
+    dbxprompt = (char *) getenv("XXGDB_DBXPROMPT");	/* first looks up env var */
 #else
     debugger = (char *) getenv("DEBUGGER");	/* first looks up env var */
+    dbxprompt = (char *) getenv("DBXPROMPT");	/* first looks up env var */
 #endif
 
 /* CRL mod 4 3/15/91 GWC if no env var then try app res for db_name */
@@ -275,7 +291,8 @@
 	debugger  = XtNewString(DEBUGGER);
 
 /* CRL mod 4 3/15/91 GWC -  allow the user to specify a db_prompt */
-    if (app_resources.db_prompt &&
+    if (dbxprompt == NULL &&
+	app_resources.db_prompt &&
 	strcmp(app_resources.db_prompt, "") != 0)
 	dbxprompt = XtNewString(app_resources.db_prompt);
   
@@ -288,7 +305,15 @@
 	if (debug)
 		fprintf(stderr,"debugger=\"%s\"\nprompt=\"%s\"\n",debugger,dbxprompt);
   
+#ifdef NEW_FREEBSD_PTYS
+    if (openpty(&master, &slave, NULL, NULL, NULL) == -1) {
+	sprintf(errmsg,"%s error: openpty failed\n");
+	perror(errmsg);
+	exit(1);
+    }
+#else
     master = open_master();
+#endif
 
     dbxpid = fork();
     if (dbxpid == -1) {
@@ -305,6 +330,7 @@
 	 *	    set line buffered mode
 	 *	    register dbx input with X
 	 */
+	close(slave);
 	close(0);
 	close(1);
 
@@ -345,7 +371,9 @@
 	}
 #endif
 
+#ifndef NEW_FREEBSD_PTYS
 	slave = open_slave(master);
+#endif
 	close(master);
 
 	/*
@@ -355,11 +383,11 @@
 	/*
 	 * (JBL)10MAY91 : use sgttyb if OLDSUN or generic BSD
 	 */ 
-#if !(defined(OLDSUNOS) || defined(BSD))
-	ioctl(slave, TCGETA, &Termio);
+#if !(defined(OLDSUNOS) || defined(BSD)) || defined(__FreeBSD__)
+	tcgetattr(slave, &Termio);
 	Termio.c_lflag &= ~ECHO;	/* No echo */
 	Termio.c_oflag &= ~ONLCR;	/* Do not map NL to CR-NL on output */
-	ioctl(slave, TCSETA, &Termio);
+	tcsetattr(slave, TCSANOW, &Termio);
 #else
 	ioctl(slave, TIOCGETP, &Termio);
 	Termio.sg_flags &= ~ECHO;	/* No echo */