> Date: Wed, 27 Apr 2005 10:36:20 -0400 > From: Daniel Jacobowitz <[EMAIL PROTECTED]> > Cc: [EMAIL PROTECTED], bug-gdb@gnu.org, [EMAIL PROTECTED] > > I can simplify this a whole lot further :-) > > You should use symtab_to_fullname. Then all the fallback logic is > unnecessary; if symtab_to_fullname fails, GDB does not know where the > file is.
Thanks for the tip. Here's the revised patch: 2005-04-27 Eli Zaretskii <[EMAIL PROTECTED]> * cli/cli-cmds.c (edit_command): If symtab->fullname is not yet set, use symtab_to_fullname , instead of trying to do its job. --- gdb/cli/cli-cmds.c~0 2005-03-26 16:18:14.000000000 +0300 +++ gdb/cli/cli-cmds.c 2005-04-27 18:37:34.000000000 +0300 @@ -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,23 +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; - + /* If we don't already know the full absolute file name of the + source file, find it now. */ + if (NULL == sal.symtab->fullname) + { + fn = symtab_to_fullname (sal.symtab); + if (NULL == fn) + fn = "unknown"; + } + else + fn = sal.symtab->fullname; + + /* $EDITOR blank +NN blank file \0 */ + cmdlen = strlen(editor) + 1 + log10 + 2 + strlen(fn) + 1; 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) - ); + sprintf (p, "%s +%d %s", editor, sal.line, fn); shell_escape(p, from_tty); xfree(p); _______________________________________________ Bug-gdb mailing list Bug-gdb@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gdb