* cli/cli-cmds.c (edit_command): If symtab->fullname is not yet
authorEli Zaretskii <eliz@gnu.org>
Thu, 28 Apr 2005 20:32:42 +0000 (20:32 +0000)
committerEli Zaretskii <eliz@gnu.org>
Thu, 28 Apr 2005 20:32:42 +0000 (20:32 +0000)
set, use symtab_to_fullname, instead of trying to do its job.  Use
xstrprintf instead of malloc and sprintf.

gdb/ChangeLog
gdb/cli/cli-cmds.c

index 8b189cb448998bab1281bb690ebd3d67d478c623..bd2e99df2ad3bead309f29804ce5f3f83cee4258 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * cli/cli-cmds.c (edit_command): If symtab->fullname is not yet
+       set, use symtab_to_fullname, instead of trying to do its job.  Use
+       xstrprintf instead of malloc and sprintf.
+
 2005-04-28  Kevin Buettner  <kevinb@redhat.com>
 
        * remote.c (init_remote_state): Eliminate use of
index 3c091fea7868443f4516ad829759f6a6c8d96e59..3d25f1ac986bb67c1b8f749a7d69fc6df4d1e8d6 100644 (file)
@@ -554,7 +554,7 @@ edit_command (char *arg, int from_tty)
   int cmdlen, log10;
   unsigned m;
   char *editor;
-  char *p;
+  char *p, *fn;
 
   /* Pull in the current default source line if necessary */
   if (arg == 0)
@@ -627,25 +627,26 @@ edit_command (char *arg, int from_tty)
 
   if ((editor = (char *) getenv ("EDITOR")) == NULL)
       editor = "/bin/ex";
-  
+
   /* Approximate base-10 log of line to 1 unit for digit count */
   for(log10=32, m=0x80000000; !(sal.line & m) && log10>0; log10--, m=m>>1);
   log10 = 1 + (int)((log10 + (0 == ((m-1) & sal.line)))/3.32192809);
 
-  cmdlen = strlen(editor) + 1
-         + (NULL == sal.symtab->dirname ? 0 : strlen(sal.symtab->dirname) + 1)
-        + (NULL == sal.symtab->filename? 0 : strlen(sal.symtab->filename)+ 1)
-        + log10 + 2;
-  
-  p = xmalloc(cmdlen);
-  sprintf(p,"%s +%d %s%s",editor,sal.line,
-     (NULL == sal.symtab->dirname ? "./" :
-        (NULL != sal.symtab->filename && *(sal.symtab->filename) != '/') ?
-          sal.symtab->dirname : ""),
-     (NULL == sal.symtab->filename ? "unknown" : sal.symtab->filename)
-  );
-  shell_escape(p, from_tty);
+  /* If we don't already know the full absolute file name of the
+     source file, find it now.  */
+  if (!sal.symtab->fullname)
+    {
+      fn = symtab_to_fullname (sal.symtab);
+      if (!fn)
+       fn = "unknown";
+    }
+  else
+    fn = sal.symtab->fullname;
 
+  /* Quote the file name, in case it has whitespace or other special
+     characters.  */
+  p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
+  shell_escape(p, from_tty);
   xfree(p);
 }