summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2020-05-25 11:37:44 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2020-05-25 11:38:02 -0400
commit92651b1d91a124b8c14e45adc8d007b659cc92c2 (patch)
tree94d42142aaa4c08c436b28f37ca2582782fa5ba2
parent42cf184456fb1470835b6dccd536c2d74461e7b6 (diff)
downloadbinutils-gdb-92651b1d91a124b8c14e45adc8d007b659cc92c2.tar.gz
gdb: Move construct_inferior_arguments to gdbsupport
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
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/infcmd.c124
-rw-r--r--gdb/inferior.h2
-rw-r--r--gdbsupport/ChangeLog5
-rw-r--r--gdbsupport/common-inferior.cc122
-rw-r--r--gdbsupport/common-inferior.h4
6 files changed, 136 insertions, 126 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 79995c93be0..a43ab08dd6c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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:
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 32905a7b591..cf6e540e795 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -259,130 +259,6 @@ server's cwd if remote debugging.\n"));
"when starting the inferior is \"%s\".\n"), cwd);
}
-
-/* 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;
-}
-
/* This function strips the '&' character (indicating background
execution) that is added as *the last* of the arguments ARGS of a
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 1ac51369dff..95af474eede 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -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,
diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog
index e7374abfc26..4f72c7dd15c 100644
--- a/gdbsupport/ChangeLog
+++ b/gdbsupport/ChangeLog
@@ -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.
diff --git a/gdbsupport/common-inferior.cc b/gdbsupport/common-inferior.cc
index ed16e89a520..a7d631f3574 100644
--- a/gdbsupport/common-inferior.cc
+++ b/gdbsupport/common-inferior.cc
@@ -24,3 +24,125 @@
/* 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;
+}
diff --git a/gdbsupport/common-inferior.h b/gdbsupport/common-inferior.h
index 3c8e87aee62..ee87bc75a3f 100644
--- a/gdbsupport/common-inferior.h
+++ b/gdbsupport/common-inferior.h
@@ -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 */