mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 16:05:56 +08:00
gdb: make inferior::m_terminal an std::string
Same idea as the previous patch, but for m_terminal. Change-Id: If9367d5db8c976a4336680adca4ea5bc31ab64d2
This commit is contained in:
@ -115,13 +115,11 @@ show_inferior_tty_command (struct ui_file *file, int from_tty,
|
|||||||
{
|
{
|
||||||
/* Note that we ignore the passed-in value in favor of computing it
|
/* Note that we ignore the passed-in value in favor of computing it
|
||||||
directly. */
|
directly. */
|
||||||
const char *inferior_tty = current_inferior ()->tty ();
|
const std::string &inferior_tty = current_inferior ()->tty ();
|
||||||
|
|
||||||
if (inferior_tty == nullptr)
|
|
||||||
inferior_tty = "";
|
|
||||||
fprintf_filtered (gdb_stdout,
|
fprintf_filtered (gdb_stdout,
|
||||||
_("Terminal for future runs of program being debugged "
|
_("Terminal for future runs of program being debugged "
|
||||||
"is \"%s\".\n"), inferior_tty);
|
"is \"%s\".\n"), inferior_tty.c_str ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -111,18 +111,15 @@ inferior::unpush_target (struct target_ops *t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
inferior::set_tty (const char *terminal_name)
|
inferior::set_tty (std::string terminal_name)
|
||||||
{
|
{
|
||||||
if (terminal_name != nullptr && *terminal_name != '\0')
|
m_terminal = std::move (terminal_name);
|
||||||
m_terminal = make_unique_xstrdup (terminal_name);
|
|
||||||
else
|
|
||||||
m_terminal = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const std::string &
|
||||||
inferior::tty ()
|
inferior::tty ()
|
||||||
{
|
{
|
||||||
return m_terminal.get ();
|
return m_terminal;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -434,13 +434,15 @@ public:
|
|||||||
void add_continuation (std::function<void ()> &&cont);
|
void add_continuation (std::function<void ()> &&cont);
|
||||||
void do_all_continuations ();
|
void do_all_continuations ();
|
||||||
|
|
||||||
/* Set/get file name for default use for standard in/out in the
|
/* Set/get file name for default use for standard in/out in the inferior.
|
||||||
inferior. On Unix systems, we try to make TERMINAL_NAME the
|
|
||||||
inferior's controlling terminal. If TERMINAL_NAME is nullptr or
|
On Unix systems, we try to make TERMINAL_NAME the inferior's controlling
|
||||||
the empty string, then the inferior inherits GDB's terminal (or
|
terminal.
|
||||||
GDBserver's if spawning a remote process). */
|
|
||||||
void set_tty (const char *terminal_name);
|
If TERMINAL_NAME is the empty string, then the inferior inherits GDB's
|
||||||
const char *tty ();
|
terminal (or GDBserver's if spawning a remote process). */
|
||||||
|
void set_tty (std::string terminal_name);
|
||||||
|
const std::string &tty ();
|
||||||
|
|
||||||
/* Set the argument string to use when running this inferior.
|
/* Set the argument string to use when running this inferior.
|
||||||
|
|
||||||
@ -587,7 +589,7 @@ private:
|
|||||||
target_stack m_target_stack;
|
target_stack m_target_stack;
|
||||||
|
|
||||||
/* The name of terminal device to use for I/O. */
|
/* The name of terminal device to use for I/O. */
|
||||||
gdb::unique_xmalloc_ptr<char> m_terminal;
|
std::string m_terminal;
|
||||||
|
|
||||||
/* The list of continuations. */
|
/* The list of continuations. */
|
||||||
std::list<std::function<void ()>> m_continuations;
|
std::list<std::function<void ()>> m_continuations;
|
||||||
|
46
gdb/inflow.c
46
gdb/inflow.c
@ -65,7 +65,7 @@ struct terminal_info
|
|||||||
|
|
||||||
/* The name of the tty (from the `tty' command) that we gave to the
|
/* The name of the tty (from the `tty' command) that we gave to the
|
||||||
inferior when it was started. */
|
inferior when it was started. */
|
||||||
char *run_terminal = nullptr;
|
std::string run_terminal;
|
||||||
|
|
||||||
/* TTY state. We save it whenever the inferior stops, and restore
|
/* TTY state. We save it whenever the inferior stops, and restore
|
||||||
it when it resumes in the foreground. */
|
it when it resumes in the foreground. */
|
||||||
@ -123,7 +123,7 @@ static sighandler_t sigquit_ours;
|
|||||||
be) used as a transient global by new_tty_prefork,
|
be) used as a transient global by new_tty_prefork,
|
||||||
create_tty_session, new_tty and new_tty_postfork, all called from
|
create_tty_session, new_tty and new_tty_postfork, all called from
|
||||||
fork_inferior, while forking a new child. */
|
fork_inferior, while forking a new child. */
|
||||||
static const char *inferior_thisrun_terminal;
|
static std::string inferior_thisrun_terminal;
|
||||||
|
|
||||||
/* Track who owns GDB's terminal (is it GDB or some inferior?). While
|
/* Track who owns GDB's terminal (is it GDB or some inferior?). While
|
||||||
target_terminal::is_ours() etc. tracks the core's intention and is
|
target_terminal::is_ours() etc. tracks the core's intention and is
|
||||||
@ -303,8 +303,8 @@ sharing_input_terminal (inferior *inf)
|
|||||||
output was redirected to our terminal), and with a false
|
output was redirected to our terminal), and with a false
|
||||||
positive we just end up trying to save/restore terminal
|
positive we just end up trying to save/restore terminal
|
||||||
settings when we didn't need to or we actually can't. */
|
settings when we didn't need to or we actually can't. */
|
||||||
if (tinfo->run_terminal != NULL)
|
if (!tinfo->run_terminal.empty ())
|
||||||
res = is_gdb_terminal (tinfo->run_terminal);
|
res = is_gdb_terminal (tinfo->run_terminal.c_str ());
|
||||||
|
|
||||||
/* If we still can't determine, assume yes. */
|
/* If we still can't determine, assume yes. */
|
||||||
if (res == TRIBOOL_UNKNOWN)
|
if (res == TRIBOOL_UNKNOWN)
|
||||||
@ -603,7 +603,6 @@ static const struct inferior_key<terminal_info> inflow_inferior_data;
|
|||||||
|
|
||||||
terminal_info::~terminal_info ()
|
terminal_info::~terminal_info ()
|
||||||
{
|
{
|
||||||
xfree (run_terminal);
|
|
||||||
xfree (ttystate);
|
xfree (ttystate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,15 +642,10 @@ copy_terminal_info (struct inferior *to, struct inferior *from)
|
|||||||
tinfo_to = get_inflow_inferior_data (to);
|
tinfo_to = get_inflow_inferior_data (to);
|
||||||
tinfo_from = get_inflow_inferior_data (from);
|
tinfo_from = get_inflow_inferior_data (from);
|
||||||
|
|
||||||
xfree (tinfo_to->run_terminal);
|
|
||||||
xfree (tinfo_to->ttystate);
|
xfree (tinfo_to->ttystate);
|
||||||
|
|
||||||
*tinfo_to = *tinfo_from;
|
*tinfo_to = *tinfo_from;
|
||||||
|
|
||||||
if (tinfo_from->run_terminal)
|
|
||||||
tinfo_to->run_terminal
|
|
||||||
= xstrdup (tinfo_from->run_terminal);
|
|
||||||
|
|
||||||
if (tinfo_from->ttystate)
|
if (tinfo_from->ttystate)
|
||||||
tinfo_to->ttystate
|
tinfo_to->ttystate
|
||||||
= serial_copy_tty_state (stdin_serial, tinfo_from->ttystate);
|
= serial_copy_tty_state (stdin_serial, tinfo_from->ttystate);
|
||||||
@ -765,19 +759,19 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty)
|
|||||||
|
|
||||||
/* NEW_TTY_PREFORK is called before forking a new child process,
|
/* NEW_TTY_PREFORK is called before forking a new child process,
|
||||||
so we can record the state of ttys in the child to be formed.
|
so we can record the state of ttys in the child to be formed.
|
||||||
TTYNAME is null if we are to share the terminal with gdb;
|
TTYNAME is empty if we are to share the terminal with gdb;
|
||||||
or points to a string containing the name of the desired tty.
|
otherwise it contains the name of the desired tty.
|
||||||
|
|
||||||
NEW_TTY is called in new child processes under Unix, which will
|
NEW_TTY is called in new child processes under Unix, which will
|
||||||
become debugger target processes. This actually switches to
|
become debugger target processes. This actually switches to
|
||||||
the terminal specified in the NEW_TTY_PREFORK call. */
|
the terminal specified in the NEW_TTY_PREFORK call. */
|
||||||
|
|
||||||
void
|
void
|
||||||
new_tty_prefork (const char *ttyname)
|
new_tty_prefork (std::string ttyname)
|
||||||
{
|
{
|
||||||
/* Save the name for later, for determining whether we and the child
|
/* Save the name for later, for determining whether we and the child
|
||||||
are sharing a tty. */
|
are sharing a tty. */
|
||||||
inferior_thisrun_terminal = ttyname;
|
inferior_thisrun_terminal = std::move (ttyname);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__GO32__) && !defined(_WIN32)
|
#if !defined(__GO32__) && !defined(_WIN32)
|
||||||
@ -798,7 +792,7 @@ check_syscall (const char *msg, int result)
|
|||||||
void
|
void
|
||||||
new_tty (void)
|
new_tty (void)
|
||||||
{
|
{
|
||||||
if (inferior_thisrun_terminal == 0)
|
if (inferior_thisrun_terminal.empty ())
|
||||||
return;
|
return;
|
||||||
#if !defined(__GO32__) && !defined(_WIN32)
|
#if !defined(__GO32__) && !defined(_WIN32)
|
||||||
int tty;
|
int tty;
|
||||||
@ -818,8 +812,8 @@ new_tty (void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Now open the specified new terminal. */
|
/* Now open the specified new terminal. */
|
||||||
tty = open (inferior_thisrun_terminal, O_RDWR | O_NOCTTY);
|
tty = open (inferior_thisrun_terminal.c_str (), O_RDWR | O_NOCTTY);
|
||||||
check_syscall (inferior_thisrun_terminal, tty);
|
check_syscall (inferior_thisrun_terminal.c_str (), tty);
|
||||||
|
|
||||||
/* Avoid use of dup2; doesn't exist on all systems. */
|
/* Avoid use of dup2; doesn't exist on all systems. */
|
||||||
if (tty != 0)
|
if (tty != 0)
|
||||||
@ -854,7 +848,7 @@ new_tty (void)
|
|||||||
|
|
||||||
/* NEW_TTY_POSTFORK is called after forking a new child process, and
|
/* NEW_TTY_POSTFORK is called after forking a new child process, and
|
||||||
adding it to the inferior table, to store the TTYNAME being used by
|
adding it to the inferior table, to store the TTYNAME being used by
|
||||||
the child, or null if it sharing the terminal with gdb. */
|
the child, or empty if it sharing the terminal with gdb. */
|
||||||
|
|
||||||
void
|
void
|
||||||
new_tty_postfork (void)
|
new_tty_postfork (void)
|
||||||
@ -862,15 +856,11 @@ new_tty_postfork (void)
|
|||||||
/* Save the name for later, for determining whether we and the child
|
/* Save the name for later, for determining whether we and the child
|
||||||
are sharing a tty. */
|
are sharing a tty. */
|
||||||
|
|
||||||
if (inferior_thisrun_terminal)
|
struct inferior *inf = current_inferior ();
|
||||||
{
|
struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
||||||
struct inferior *inf = current_inferior ();
|
|
||||||
struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
|
||||||
|
|
||||||
tinfo->run_terminal = xstrdup (inferior_thisrun_terminal);
|
tinfo->run_terminal = std::move (inferior_thisrun_terminal);
|
||||||
}
|
inferior_thisrun_terminal.clear ();
|
||||||
|
|
||||||
inferior_thisrun_terminal = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -894,7 +884,7 @@ set_sigint_trap (void)
|
|||||||
struct inferior *inf = current_inferior ();
|
struct inferior *inf = current_inferior ();
|
||||||
struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
||||||
|
|
||||||
if (inf->attach_flag || tinfo->run_terminal)
|
if (inf->attach_flag || !tinfo->run_terminal.empty ())
|
||||||
{
|
{
|
||||||
osig = signal (SIGINT, pass_signal);
|
osig = signal (SIGINT, pass_signal);
|
||||||
osig_set = 1;
|
osig_set = 1;
|
||||||
@ -927,7 +917,7 @@ create_tty_session (void)
|
|||||||
#ifdef HAVE_SETSID
|
#ifdef HAVE_SETSID
|
||||||
pid_t ret;
|
pid_t ret;
|
||||||
|
|
||||||
if (!job_control || inferior_thisrun_terminal == 0)
|
if (!job_control || inferior_thisrun_terminal.empty ())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = setsid ();
|
ret = setsid ();
|
||||||
|
@ -244,7 +244,10 @@ mi_cmd_env_dir (const char *command, char **argv, int argc)
|
|||||||
void
|
void
|
||||||
mi_cmd_inferior_tty_set (const char *command, char **argv, int argc)
|
mi_cmd_inferior_tty_set (const char *command, char **argv, int argc)
|
||||||
{
|
{
|
||||||
current_inferior ()->set_tty (argv[0]);
|
if (argc > 0)
|
||||||
|
current_inferior ()->set_tty (argv[0]);
|
||||||
|
else
|
||||||
|
current_inferior ()->set_tty ("");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print the inferior terminal device name. */
|
/* Print the inferior terminal device name. */
|
||||||
@ -255,8 +258,8 @@ mi_cmd_inferior_tty_show (const char *command, char **argv, int argc)
|
|||||||
if ( !mi_valid_noargs ("-inferior-tty-show", argc, argv))
|
if ( !mi_valid_noargs ("-inferior-tty-show", argc, argv))
|
||||||
error (_("-inferior-tty-show: Usage: No args"));
|
error (_("-inferior-tty-show: Usage: No args"));
|
||||||
|
|
||||||
const char *inferior_tty = current_inferior ()->tty ();
|
const std::string &inferior_tty = current_inferior ()->tty ();
|
||||||
if (inferior_tty != NULL)
|
if (!inferior_tty.empty ())
|
||||||
current_uiout->field_string ("inferior_tty_terminal", inferior_tty);
|
current_uiout->field_string ("inferior_tty_terminal", inferior_tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
struct inferior;
|
struct inferior;
|
||||||
|
|
||||||
extern void new_tty_prefork (const char *);
|
extern void new_tty_prefork (std::string ttyname);
|
||||||
|
|
||||||
extern void new_tty (void);
|
extern void new_tty (void);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user