From 2becadeece8514d5027d1de743ee843cfd0a109e Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 14 Sep 2002 03:28:23 +0000 Subject: [PATCH] * win32-nat.c (child_create_inferior): Honor 'tty' command. --- gdb/ChangeLog | 4 ++++ gdb/win32-nat.c | 34 ++++++++++++++++++++++++++++++++++ gdb/windows-nat.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 78af9f8..f077dc2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2002-09-13 Christopher Faylor + + * win32-nat.c (child_create_inferior): Honor 'tty' command. + 2002-09-13 Daniel Jacobowitz * gdbtypes.c (check_stub_method): Make static. diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c index 781a841..e2a85e1 100644 --- a/gdb/win32-nat.c +++ b/gdb/win32-nat.c @@ -1461,6 +1461,8 @@ child_create_inferior (char *exec_file, char *allargs, char **env) char *toexec; char shell[MAX_PATH + 1]; /* Path to shell */ const char *sh; + int tty; + int ostdin, ostdout, ostderr; if (!exec_file) error ("No executable specified, use `target exec'.\n"); @@ -1573,6 +1575,27 @@ child_create_inferior (char *exec_file, char *allargs, char **env) *temp = 0; } + if (!inferior_io_terminal) + tty = ostdin = ostdout = ostderr = -1; + else + { + tty = open (inferior_io_terminal, O_RDWR | O_NOCTTY); + if (tty < 0) + { + print_sys_errmsg (inferior_io_terminal, errno); + ostdin = ostdout = ostderr = -1; + } + else + { + ostdin = dup (0); + ostdout = dup (1); + ostderr = dup (2); + dup2 (tty, 0); + dup2 (tty, 1); + dup2 (tty, 2); + } + } + ret = CreateProcess (0, args, /* command line */ NULL, /* Security */ @@ -1583,6 +1606,17 @@ child_create_inferior (char *exec_file, char *allargs, char **env) NULL, /* current directory */ &si, &pi); + if (tty >= 0) + { + close (tty); + dup2 (ostdin, 0); + dup2 (ostdout, 1); + dup2 (ostderr, 2); + close (ostdin); + close (ostdout); + close (ostderr); + } + if (!ret) error ("Error creating process %s, (error %d)\n", exec_file, GetLastError ()); diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 781a841..e2a85e1 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1461,6 +1461,8 @@ child_create_inferior (char *exec_file, char *allargs, char **env) char *toexec; char shell[MAX_PATH + 1]; /* Path to shell */ const char *sh; + int tty; + int ostdin, ostdout, ostderr; if (!exec_file) error ("No executable specified, use `target exec'.\n"); @@ -1573,6 +1575,27 @@ child_create_inferior (char *exec_file, char *allargs, char **env) *temp = 0; } + if (!inferior_io_terminal) + tty = ostdin = ostdout = ostderr = -1; + else + { + tty = open (inferior_io_terminal, O_RDWR | O_NOCTTY); + if (tty < 0) + { + print_sys_errmsg (inferior_io_terminal, errno); + ostdin = ostdout = ostderr = -1; + } + else + { + ostdin = dup (0); + ostdout = dup (1); + ostderr = dup (2); + dup2 (tty, 0); + dup2 (tty, 1); + dup2 (tty, 2); + } + } + ret = CreateProcess (0, args, /* command line */ NULL, /* Security */ @@ -1583,6 +1606,17 @@ child_create_inferior (char *exec_file, char *allargs, char **env) NULL, /* current directory */ &si, &pi); + if (tty >= 0) + { + close (tty); + dup2 (ostdin, 0); + dup2 (ostdout, 1); + dup2 (ostderr, 2); + close (ostdin); + close (ostdout); + close (ostderr); + } + if (!ret) error ("Error creating process %s, (error %d)\n", exec_file, GetLastError ()); -- 2.7.4