summaryrefslogtreecommitdiff
path: root/devel/xxgdb/files/patch-calldbx.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/xxgdb/files/patch-calldbx.c')
-rw-r--r--devel/xxgdb/files/patch-calldbx.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/devel/xxgdb/files/patch-calldbx.c b/devel/xxgdb/files/patch-calldbx.c
new file mode 100644
index 000000000000..966a60557d1f
--- /dev/null
+++ b/devel/xxgdb/files/patch-calldbx.c
@@ -0,0 +1,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 */