gdb: add setter/getter for inferior cwd
authorSimon Marchi <simon.marchi@polymtl.ca>
Sat, 26 Jun 2021 01:57:56 +0000 (21:57 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Fri, 23 Jul 2021 19:38:54 +0000 (15:38 -0400)
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

gdb/infcmd.c
gdb/inferior.h
gdb/remote.c
gdb/windows-nat.c

index 1407a3ea46641ad77b866d45f6e2ed275914a46f..be6031d29364291e81dbbe2c6dfb67eceb988054 100644 (file)
@@ -154,28 +154,12 @@ show_args_command (struct ui_file *file, int from_tty,
                              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.  */
 
 const char *
 get_inferior_cwd ()
 {
-  return current_inferior ()->cwd.get ();
+  return current_inferior ()->cwd ();
 }
 
 /* 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)
 {
   if (*inferior_cwd_scratch == '\0')
-    set_inferior_cwd (NULL);
+    current_inferior ()->set_cwd (nullptr);
   else
-    set_inferior_cwd (inferior_cwd_scratch);
+    current_inferior ()->set_cwd (inferior_cwd_scratch);
 }
 
 /* Handle the 'show cwd' command.  */
@@ -195,7 +179,7 @@ static void
 show_cwd_command (struct ui_file *file, int from_tty,
                  struct cmd_list_element *c, const char *value)
 {
-  const char *cwd = get_inferior_cwd ();
+  const char *cwd = current_inferior ()->cwd ();
 
   if (cwd == NULL)
     fprintf_filtered (gdb_stdout,
index 445b56634b4f6ceff64bd074c519e5a88df618d3..fb57df7aec44443636635051cfaef05c934947a9 100644 (file)
@@ -466,6 +466,25 @@ public:
     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
      inferiors.  */
   int num = 0;
@@ -495,10 +514,6 @@ public:
   /* The program space bound to this inferior.  */
   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_*
      call.  */
   target_terminal_state terminal_state = target_terminal_state::is_ours;
@@ -591,6 +606,10 @@ private:
 
      This is nullptr when there are not 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
index e488ca6277e163590daad55a1c6f396f31556b0b..dc3948ba67ebf29581b3f325c7de4d150c933281 100644 (file)
@@ -10391,7 +10391,7 @@ remote_target::extended_remote_set_inferior_cwd ()
 {
   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 ();
 
       if (inferior_cwd != NULL)
index 05d95ea7d6ad8b862a625d17af4029a12fb357aa..9526149311b1c7f8348764d563af85b51a9610bd 100644 (file)
@@ -2558,7 +2558,7 @@ windows_nat_target::create_inferior (const char *exec_file,
   if (!exec_file)
     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;
   if (inferior_cwd != NULL)
     {