mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
gdb: add setter/getter for inferior cwd
Add cwd/set_cwd to the inferior class, remove set_inferior_args. Keep get_inferior_args, because it is used from fork_inferior, in shared code. The cwd could eventually be passed as a parameter eventually, though, I think that would be cleaner. Change-Id: Ifb72ea865d7e6f9a491308f0d5c1595579d8427e
This commit is contained in:
24
gdb/infcmd.c
24
gdb/infcmd.c
@ -154,28 +154,12 @@ show_args_command (struct ui_file *file, int from_tty,
|
|||||||
current_inferior ()->args ());
|
current_inferior ()->args ());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the inferior current working directory. If CWD is NULL, unset
|
|
||||||
the directory. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_inferior_cwd (const char *cwd)
|
|
||||||
{
|
|
||||||
struct inferior *inf = current_inferior ();
|
|
||||||
|
|
||||||
gdb_assert (inf != NULL);
|
|
||||||
|
|
||||||
if (cwd == NULL)
|
|
||||||
inf->cwd.reset ();
|
|
||||||
else
|
|
||||||
inf->cwd.reset (xstrdup (cwd));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* See gdbsupport/common-inferior.h. */
|
/* See gdbsupport/common-inferior.h. */
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
get_inferior_cwd ()
|
get_inferior_cwd ()
|
||||||
{
|
{
|
||||||
return current_inferior ()->cwd.get ();
|
return current_inferior ()->cwd ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle the 'set cwd' command. */
|
/* Handle the 'set cwd' command. */
|
||||||
@ -184,9 +168,9 @@ static void
|
|||||||
set_cwd_command (const char *args, int from_tty, struct cmd_list_element *c)
|
set_cwd_command (const char *args, int from_tty, struct cmd_list_element *c)
|
||||||
{
|
{
|
||||||
if (*inferior_cwd_scratch == '\0')
|
if (*inferior_cwd_scratch == '\0')
|
||||||
set_inferior_cwd (NULL);
|
current_inferior ()->set_cwd (nullptr);
|
||||||
else
|
else
|
||||||
set_inferior_cwd (inferior_cwd_scratch);
|
current_inferior ()->set_cwd (inferior_cwd_scratch);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle the 'show cwd' command. */
|
/* Handle the 'show cwd' command. */
|
||||||
@ -195,7 +179,7 @@ static void
|
|||||||
show_cwd_command (struct ui_file *file, int from_tty,
|
show_cwd_command (struct ui_file *file, int from_tty,
|
||||||
struct cmd_list_element *c, const char *value)
|
struct cmd_list_element *c, const char *value)
|
||||||
{
|
{
|
||||||
const char *cwd = get_inferior_cwd ();
|
const char *cwd = current_inferior ()->cwd ();
|
||||||
|
|
||||||
if (cwd == NULL)
|
if (cwd == NULL)
|
||||||
fprintf_filtered (gdb_stdout,
|
fprintf_filtered (gdb_stdout,
|
||||||
|
@ -466,6 +466,25 @@ public:
|
|||||||
return m_args.get ();
|
return m_args.get ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the inferior current working directory.
|
||||||
|
|
||||||
|
If CWD is NULL, unset the directory. */
|
||||||
|
void set_cwd (const char *cwd)
|
||||||
|
{
|
||||||
|
if (cwd == NULL)
|
||||||
|
m_cwd.reset ();
|
||||||
|
else
|
||||||
|
m_cwd.reset (xstrdup (cwd));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the inferior current working directory.
|
||||||
|
|
||||||
|
Return nullptr if the current working directory is not specified. */
|
||||||
|
const char *cwd () const
|
||||||
|
{
|
||||||
|
return m_cwd.get ();
|
||||||
|
}
|
||||||
|
|
||||||
/* Convenient handle (GDB inferior id). Unique across all
|
/* Convenient handle (GDB inferior id). Unique across all
|
||||||
inferiors. */
|
inferiors. */
|
||||||
int num = 0;
|
int num = 0;
|
||||||
@ -495,10 +514,6 @@ public:
|
|||||||
/* The program space bound to this inferior. */
|
/* The program space bound to this inferior. */
|
||||||
struct program_space *pspace = NULL;
|
struct program_space *pspace = NULL;
|
||||||
|
|
||||||
/* The current working directory that will be used when starting
|
|
||||||
this inferior. */
|
|
||||||
gdb::unique_xmalloc_ptr<char> cwd;
|
|
||||||
|
|
||||||
/* The terminal state as set by the last target_terminal::terminal_*
|
/* The terminal state as set by the last target_terminal::terminal_*
|
||||||
call. */
|
call. */
|
||||||
target_terminal_state terminal_state = target_terminal_state::is_ours;
|
target_terminal_state terminal_state = target_terminal_state::is_ours;
|
||||||
@ -591,6 +606,10 @@ private:
|
|||||||
|
|
||||||
This is nullptr when there are not args. */
|
This is nullptr when there are not args. */
|
||||||
gdb::unique_xmalloc_ptr<char> m_args;
|
gdb::unique_xmalloc_ptr<char> m_args;
|
||||||
|
|
||||||
|
/* The current working directory that will be used when starting
|
||||||
|
this inferior. */
|
||||||
|
gdb::unique_xmalloc_ptr<char> m_cwd;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Keep a registry of per-inferior data-pointers required by other GDB
|
/* Keep a registry of per-inferior data-pointers required by other GDB
|
||||||
|
@ -10391,7 +10391,7 @@ remote_target::extended_remote_set_inferior_cwd ()
|
|||||||
{
|
{
|
||||||
if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
|
if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
|
||||||
{
|
{
|
||||||
const char *inferior_cwd = get_inferior_cwd ();
|
const char *inferior_cwd = current_inferior ()->cwd ();
|
||||||
remote_state *rs = get_remote_state ();
|
remote_state *rs = get_remote_state ();
|
||||||
|
|
||||||
if (inferior_cwd != NULL)
|
if (inferior_cwd != NULL)
|
||||||
|
@ -2558,7 +2558,7 @@ windows_nat_target::create_inferior (const char *exec_file,
|
|||||||
if (!exec_file)
|
if (!exec_file)
|
||||||
error (_("No executable specified, use `target exec'."));
|
error (_("No executable specified, use `target exec'."));
|
||||||
|
|
||||||
const char *inferior_cwd = get_inferior_cwd ();
|
const char *inferior_cwd = current_inferior ()->cwd ();
|
||||||
std::string expanded_infcwd;
|
std::string expanded_infcwd;
|
||||||
if (inferior_cwd != NULL)
|
if (inferior_cwd != NULL)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user