Refactor code to check for terminal sharing

This refactors the code to check for terminal sharing.
is_gdb_terminal is exported, and sharing_input_terminal_1 is renamed,
slightly refactored, and moved to posix-hdep.c.  A new
Windows-specific implementation of this function is added to
mingw-hdep.c.

MSDN has a warning about GetConsoleProcessList

    This API is not recommended and does not have a virtual terminal
    equivalent. [...] Applications remoting via cross-platform
    utilities and transports like SSH may not work as expected if
    using this API.

However, we believe this isn't likely to be an issue for gdb.
This commit is contained in:
Tom Tromey
2022-12-05 11:15:09 -07:00
parent d2f803afd5
commit c1dc47f53c
4 changed files with 63 additions and 26 deletions

View File

@ -19,8 +19,8 @@
#include "defs.h"
#include "gdbsupport/event-loop.h"
#include "gdbsupport/gdb_select.h"
#include "inferior.h"
/* Wrapper for select. Nothing special needed on POSIX platforms. */
@ -38,3 +38,21 @@ gdb_console_fputs (const char *buf, FILE *f)
{
return 0;
}
/* See inferior.h. */
tribool
sharing_input_terminal (int pid)
{
/* Using host-dependent code here is fine, because the
child_terminal_foo functions are meant to be used by child/native
targets. */
#if defined (__linux__) || defined (__sun__)
char buf[100];
xsnprintf (buf, sizeof (buf), "/proc/%d/fd/0", pid);
return is_gdb_terminal (buf);
#else
return TRIBOOL_UNKNOWN;
#endif
}