diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-06-22 04:27:00 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-06-22 04:27:00 +0000 |
commit | 3768398df869ae68cede4a9913cdae34a71782a0 (patch) | |
tree | 5297fa6588f364592ba1f365ebb3adb07605fbdc /gdb | |
parent | 304b747aada43ce6ed4e3098b6ec2ab3495df270 (diff) | |
download | gdb-3768398df869ae68cede4a9913cdae34a71782a0.zip gdb-3768398df869ae68cede4a9913cdae34a71782a0.tar.gz gdb-3768398df869ae68cede4a9913cdae34a71782a0.tar.bz2 |
* fork-child.c (fork_inferior): Quote exec_file so it can contain
funky characters.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/fork-child.c | 25 |
2 files changed, 27 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9179c38..d3c16b2 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 1ec7e7a..613f1ee 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); |