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/fork-child.c | |
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/fork-child.c')
-rw-r--r-- | gdb/fork-child.c | 25 |
1 files changed, 22 insertions, 3 deletions
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); |