From 3768398df869ae68cede4a9913cdae34a71782a0 Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Tue, 22 Jun 1993 04:27:00 +0000 Subject: [PATCH] * fork-child.c (fork_inferior): Quote exec_file so it can contain funky characters. --- gdb/ChangeLog | 5 +++++ gdb/fork-child.c | 25 ++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9179c38aed7..d3c16b2b944 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +Mon Jun 21 16:09:46 1993 Jim Kingdon (kingdon@cygnus.com) + + * fork-child.c (fork_inferior): Quote exec_file so it can contain + funky characters. + Mon Jun 21 16:56:47 1993 Fred Fish (fnf@cygnus.com) * Makefile.in (INCLUDE_CFLAGS): Add BFD_INCLUDES for now, since diff --git a/gdb/fork-child.c b/gdb/fork-child.c index 1ec7e7a73d5..613f1eeaa10 100644 --- a/gdb/fork-child.c +++ b/gdb/fork-child.c @@ -80,8 +80,11 @@ fork_inferior (exec_file, allargs, env, traceme_fun, init_trace_fun) shell_file = getenv ("SHELL"); if (shell_file == NULL) shell_file = default_shell_file; - - len = 5 + strlen (exec_file) + 1 + strlen (allargs) + 1 + /*slop*/ 10; + + /* Multiplying the length of exec_file by 4 is to account for the fact + that it may expand when quoted; it is a worst-case number based on + every character being '. */ + len = 5 + 4 * strlen (exec_file) + 1 + strlen (allargs) + 1 + /*slop*/ 12; /* If desired, concat something onto the front of ALLARGS. SHELL_COMMAND is the result. */ #ifdef SHELL_COMMAND_CONCAT @@ -92,7 +95,23 @@ fork_inferior (exec_file, allargs, env, traceme_fun, init_trace_fun) shell_command[0] = '\0'; #endif strcat (shell_command, "exec "); - strcat (shell_command, exec_file); + + /* Now add exec_file, quoting as necessary. Quoting in this style is + said to work with all shells. */ + { + char *p; + + strcat (shell_command, "'"); + for (p = exec_file; *p != '\0'; ++p) + { + if (*p == '\'') + strcat (shell_command, "'\\''"); + else + strncat (shell_command, p, 1); + } + strcat (shell_command, "'"); + } + strcat (shell_command, " "); strcat (shell_command, allargs); -- 2.30.2