gdb: Move construct_inferior_arguments to gdbsupport
authorMichael Weghorn <m.weghorn@posteo.de>
Mon, 25 May 2020 15:37:44 +0000 (11:37 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Mon, 25 May 2020 15:38:02 +0000 (11:38 -0400)
This moves the function construct_inferior_arguments from
gdb/inferior.h and gdb/infcmd.c to gdbsupport/common-inferior.{h,cc}.
While at it, also move the function's comment to the header file
to align with current standards.

The intention is to use it from gdbserver in a follow-up commit.

gdb/ChangeLog:

* infcmd.c, inferior.h: (construct_inferior_arguments):
Moved function from here to gdbsupport/common-inferior.{h,cc}

gdbsupport/ChangeLog:

* common-inferior.h, common-inferior.cc: (construct_inferior_arguments):
Move function here from gdb/infcmd.c, gdb/inferior.h

Change-Id: Ib9290464ce8c0872f605d8829f88352d064c30d6

gdb/ChangeLog
gdb/infcmd.c
gdb/inferior.h
gdbsupport/ChangeLog
gdbsupport/common-inferior.cc
gdbsupport/common-inferior.h

index 79995c93be09a354d54a04707cbfaaca0402aef3..a43ab08dd6c61882815762c51afbb2ea8d74a76d 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-25  Michael Weghorn  <m.weghorn@posteo.de>
+
+       * infcmd.c, inferior.h: (construct_inferior_arguments):
+       Moved function from here to gdbsupport/common-inferior.{h,cc}
+
 2020-05-23  Tom Tromey  <tom@tromey.com>
 
        Revert commit eca1f90c:
index 32905a7b591e8d3d5b108d2e42a61e76d2433c0c..cf6e540e79587a41a98d1748e9dcad58e9c73884 100644 (file)
@@ -259,130 +259,6 @@ server's cwd if remote debugging.\n"));
                        "when starting the inferior is \"%s\".\n"), cwd);
 }
 
-\f
-/* Compute command-line string given argument vector.  This does the
-   same shell processing as fork_inferior.  */
-
-char *
-construct_inferior_arguments (int argc, char **argv)
-{
-  char *result;
-
-  /* ARGC should always be at least 1, but we double check this
-     here.  This is also needed to silence -Werror-stringop
-     warnings.  */
-  gdb_assert (argc > 0);
-
-  if (startup_with_shell)
-    {
-#ifdef __MINGW32__
-      /* This holds all the characters considered special to the
-        Windows shells.  */
-      static const char special[] = "\"!&*|[]{}<>?`~^=;, \t\n";
-      static const char quote = '"';
-#else
-      /* This holds all the characters considered special to the
-        typical Unix shells.  We include `^' because the SunOS
-        /bin/sh treats it as a synonym for `|'.  */
-      static const char special[] = "\"!#$&*()\\|[]{}<>?'`~^; \t\n";
-      static const char quote = '\'';
-#endif
-      int i;
-      int length = 0;
-      char *out, *cp;
-
-      /* We over-compute the size.  It shouldn't matter.  */
-      for (i = 0; i < argc; ++i)
-       length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0');
-
-      result = (char *) xmalloc (length);
-      out = result;
-
-      for (i = 0; i < argc; ++i)
-       {
-         if (i > 0)
-           *out++ = ' ';
-
-         /* Need to handle empty arguments specially.  */
-         if (argv[i][0] == '\0')
-           {
-             *out++ = quote;
-             *out++ = quote;
-           }
-         else
-           {
-#ifdef __MINGW32__
-             int quoted = 0;
-
-             if (strpbrk (argv[i], special))
-               {
-                 quoted = 1;
-                 *out++ = quote;
-               }
-#endif
-             for (cp = argv[i]; *cp; ++cp)
-               {
-                 if (*cp == '\n')
-                   {
-                     /* A newline cannot be quoted with a backslash (it
-                        just disappears), only by putting it inside
-                        quotes.  */
-                     *out++ = quote;
-                     *out++ = '\n';
-                     *out++ = quote;
-                   }
-                 else
-                   {
-#ifdef __MINGW32__
-                     if (*cp == quote)
-#else
-                     if (strchr (special, *cp) != NULL)
-#endif
-                       *out++ = '\\';
-                     *out++ = *cp;
-                   }
-               }
-#ifdef __MINGW32__
-             if (quoted)
-               *out++ = quote;
-#endif
-           }
-       }
-      *out = '\0';
-    }
-  else
-    {
-      /* In this case we can't handle arguments that contain spaces,
-        tabs, or newlines -- see breakup_args().  */
-      int i;
-      int length = 0;
-
-      for (i = 0; i < argc; ++i)
-       {
-         char *cp = strchr (argv[i], ' ');
-         if (cp == NULL)
-           cp = strchr (argv[i], '\t');
-         if (cp == NULL)
-           cp = strchr (argv[i], '\n');
-         if (cp != NULL)
-           error (_("can't handle command-line "
-                    "argument containing whitespace"));
-         length += strlen (argv[i]) + 1;
-       }
-
-      result = (char *) xmalloc (length);
-      result[0] = '\0';
-      for (i = 0; i < argc; ++i)
-       {
-         if (i > 0)
-           strcat (result, " ");
-         strcat (result, argv[i]);
-       }
-    }
-
-  return result;
-}
-\f
 
 /* This function strips the '&' character (indicating background
    execution) that is added as *the last* of the arguments ARGS of a
index 1ac51369dff26a24a6cf68b97a8775fece6492c2..95af474eedeb77a025565c1f43bb7dd25f929759 100644 (file)
@@ -184,8 +184,6 @@ extern void child_interrupt (struct target_ops *self);
    STARTUP_INFERIOR.  */
 extern ptid_t gdb_startup_inferior (pid_t pid, int num_traps);
 
-extern char *construct_inferior_arguments (int, char **);
-
 /* From infcmd.c */
 
 /* Initial inferior setup.  Determines the exec file is not yet known,
index e7374abfc262514013706a6423827ba0cbed0692..4f72c7dd15c201d30806f0f0d58b147e858ff419 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-25  Michael Weghorn  <m.weghorn@posteo.de>
+
+       * common-inferior.h, common-inferior.cc: (construct_inferior_arguments):
+       Move function here from gdb/infcmd.c, gdb/inferior.h
+
 2020-05-14  Kevin Buettner  <kevinb@redhat.com>
 
        * btrace-common.h (btrace_cpu_vendor): Add CV_AMD.
index ed16e89a5205a4c58147cb81f1519e1f3d1e94eb..a7d631f3574d64aacd171eaf594a94b1625ceb45 100644 (file)
 /* See common-inferior.h.  */
 
 bool startup_with_shell = true;
+
+/* See common-inferior.h.  */
+
+char *
+construct_inferior_arguments (int argc, char **argv)
+{
+  char *result;
+
+  /* ARGC should always be at least 1, but we double check this
+     here.  This is also needed to silence -Werror-stringop
+     warnings.  */
+  gdb_assert (argc > 0);
+
+  if (startup_with_shell)
+    {
+#ifdef __MINGW32__
+      /* This holds all the characters considered special to the
+        Windows shells.  */
+      static const char special[] = "\"!&*|[]{}<>?`~^=;, \t\n";
+      static const char quote = '"';
+#else
+      /* This holds all the characters considered special to the
+        typical Unix shells.  We include `^' because the SunOS
+        /bin/sh treats it as a synonym for `|'.  */
+      static const char special[] = "\"!#$&*()\\|[]{}<>?'`~^; \t\n";
+      static const char quote = '\'';
+#endif
+      int i;
+      int length = 0;
+      char *out, *cp;
+
+      /* We over-compute the size.  It shouldn't matter.  */
+      for (i = 0; i < argc; ++i)
+       length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0');
+
+      result = (char *) xmalloc (length);
+      out = result;
+
+      for (i = 0; i < argc; ++i)
+       {
+         if (i > 0)
+           *out++ = ' ';
+
+         /* Need to handle empty arguments specially.  */
+         if (argv[i][0] == '\0')
+           {
+             *out++ = quote;
+             *out++ = quote;
+           }
+         else
+           {
+#ifdef __MINGW32__
+             int quoted = 0;
+
+             if (strpbrk (argv[i], special))
+               {
+                 quoted = 1;
+                 *out++ = quote;
+               }
+#endif
+             for (cp = argv[i]; *cp; ++cp)
+               {
+                 if (*cp == '\n')
+                   {
+                     /* A newline cannot be quoted with a backslash (it
+                        just disappears), only by putting it inside
+                        quotes.  */
+                     *out++ = quote;
+                     *out++ = '\n';
+                     *out++ = quote;
+                   }
+                 else
+                   {
+#ifdef __MINGW32__
+                     if (*cp == quote)
+#else
+                     if (strchr (special, *cp) != NULL)
+#endif
+                       *out++ = '\\';
+                     *out++ = *cp;
+                   }
+               }
+#ifdef __MINGW32__
+             if (quoted)
+               *out++ = quote;
+#endif
+           }
+       }
+      *out = '\0';
+    }
+  else
+    {
+      /* In this case we can't handle arguments that contain spaces,
+        tabs, or newlines -- see breakup_args().  */
+      int i;
+      int length = 0;
+
+      for (i = 0; i < argc; ++i)
+       {
+         char *cp = strchr (argv[i], ' ');
+         if (cp == NULL)
+           cp = strchr (argv[i], '\t');
+         if (cp == NULL)
+           cp = strchr (argv[i], '\n');
+         if (cp != NULL)
+           error (_("can't handle command-line "
+                    "argument containing whitespace"));
+         length += strlen (argv[i]) + 1;
+       }
+
+      result = (char *) xmalloc (length);
+      result[0] = '\0';
+      for (i = 0; i < argc; ++i)
+       {
+         if (i > 0)
+           strcat (result, " ");
+         strcat (result, argv[i]);
+       }
+    }
+
+  return result;
+}
index 3c8e87aee623e7237241b5a5ba96be96d80f4370..ee87bc75a3f33032d033f515f819520e841ffa15 100644 (file)
@@ -58,4 +58,8 @@ extern void set_inferior_cwd (const char *cwd);
    the target is started up with a shell.  */
 extern bool startup_with_shell;
 
+/* Compute command-line string given argument vector. This does the
+   same shell processing as fork_inferior.  */
+extern char *construct_inferior_arguments (int, char **);
+
 #endif /* COMMON_COMMON_INFERIOR_H */