* fork-child.c (fork_inferior): Only quote exec file if needed.
authorJim Kingdon <jkingdon@engr.sgi.com>
Tue, 27 Jul 1993 17:43:09 +0000 (17:43 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Tue, 27 Jul 1993 17:43:09 +0000 (17:43 +0000)
* mipsread.c (parse_symbol): Remove 21 Jul 93 change with
stTypedef inside an stBlock.

gdb/fork-child.c
gdb/mipsread.c

index b413889f996908f2f7ea5c78fc3b6ec66a01423a..40f76802c9a215584bb5fb02d3e0fb1f178c1d89 100644 (file)
@@ -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, " ");
index 2f68c27e0b280ef4231c3fb8a3202e180d5a507a..948098ce84f62c15c760636f551565b3fd5318c7 100644 (file)
@@ -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: