From 38bbfd37955ebeb355922d7dad7d33d64537d5f2 Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Tue, 27 Jul 1993 17:43:09 +0000 Subject: [PATCH] * fork-child.c (fork_inferior): Only quote exec file if needed. * mipsread.c (parse_symbol): Remove 21 Jul 93 change with stTypedef inside an stBlock. --- gdb/fork-child.c | 56 ++++++++++++++++++++++++++++++++++++++++-------- gdb/mipsread.c | 5 +++++ 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/gdb/fork-child.c b/gdb/fork-child.c index b413889f99..40f76802c9 100644 --- a/gdb/fork-child.c +++ b/gdb/fork-child.c @@ -97,20 +97,58 @@ fork_inferior (exec_file, allargs, env, traceme_fun, init_trace_fun) #endif strcat (shell_command, "exec "); - /* Now add exec_file, quoting as necessary. Quoting in this style is - said to work with all shells. */ + /* Now add exec_file, quoting as necessary. */ { char *p; + int need_to_quote; - strcat (shell_command, "'"); - for (p = exec_file; *p != '\0'; ++p) + /* Quoting in this style is said to work with all shells. But csh + on IRIX 4.0.1 can't deal with it. So we only quote it if we need + to. */ + p = exec_file; + while (1) { - if (*p == '\'') - strcat (shell_command, "'\\''"); - else - strncat (shell_command, p, 1); + switch (*p) + { + case '\'': + case '"': + case '(': + case ')': + case '$': + case '&': + case ';': + case '<': + case '>': + case ' ': + case '\n': + case '\t': + need_to_quote = 1; + goto end_scan; + + case '\0': + need_to_quote = 0; + goto end_scan; + + default: + break; + } + ++p; + } + end_scan: + if (need_to_quote) + { + 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, "'"); + else + strcat (shell_command, exec_file); } strcat (shell_command, " "); diff --git a/gdb/mipsread.c b/gdb/mipsread.c index 2f68c27e0b..948098ce84 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -954,6 +954,10 @@ parse_symbol (sh, ax, ext_sh, bigend) max_value = tsym.value; break; +#if 0 + /* This does not fix the bug which it intended to fix, + and makes GDB hang when reading its own symbol table on + the SGI, when compiled with the SGI compiler. */ case stTypedef: case stConstant: case stStaticProc: @@ -962,6 +966,7 @@ parse_symbol (sh, ax, ext_sh, bigend) Apparently processing them like the following prevents core dumps. */ /* FALLTHROUGH */ +#endif case stBlock: case stUnion: -- 2.34.1