From a955ca7173f8c0fed60292d19b949adb23b76214 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 28 Apr 2005 20:32:42 +0000 Subject: * 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. --- gdb/ChangeLog | 6 ++++++ gdb/cli/cli-cmds.c | 31 ++++++++++++++++--------------- 2 files changed, 22 insertions(+), 15 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8b189cb..bd2e99d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2005-04-28 Eli Zaretskii + + * 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 * remote.c (init_remote_state): Eliminate use of diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 3c091fe..3d25f1a 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -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); } -- cgit v1.1