From: "Eli Zaretskii" <eliz@gnu.org>
To: bug-gdb@rich-paul.net
Cc: bug-gdb@gnu.org, gdb-patches@sources.redhat.com
Subject: Re: [RFA] Fix file name generation in edit_command (was: Ver 6.3 edit command failing)
Date: Thu, 28 Apr 2005 20:39:00 -0000 [thread overview]
Message-ID: <01c54c32$Blat.v2.4$26bfb1a0@zahav.net.il> (raw)
In-Reply-To: <20050427180410.GA19592@nevyn.them.org> (message from Daniel Jacobowitz on Wed, 27 Apr 2005 14:04:10 -0400)
> Date: Wed, 27 Apr 2005 14:04:10 -0400
> From: Daniel Jacobowitz <drow@false.org>
> Cc: bug-gdb@rich-paul.net, bug-gdb@gnu.org, gdb-patches@sources.redhat.com
>
> It strikes me as odd that you can use "edit" if GDB doesn't know where
> the source file is. I realize this is a pre-existing condition, but...
> Also, symtab_to_fullname includes the cached fullname check. So what's
> your opinion of boiling the whole thing down to:
>
> fn = symtab_to_fullname (sal.symtab);
> if (fn == NULL)
> error (_("Could not find file \"%s\""), sal.symtab->filename);
> p = xstrprintf ("%s +%d %s", editor, sal.line, fn);
>
> Mark, can I have those bonus points? :-)
I ended up committing the attached. Note that it quotes the file
name, to account for possible special characters that would confise
the shell. (I use "..." for quoting because this is more portable to
various shells, including on Windows.)
Thanks to Daniel and Mark for valuable input.
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.
Index: gdb/cli/cli-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-cmds.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- gdb/cli/cli-cmds.c 16 Mar 2005 15:58:41 -0000 1.58
+++ gdb/cli/cli-cmds.c 28 Apr 2005 20:32:41 -0000 1.59
@@ -554,7 +554,7 @@
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 @@
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);
}
next prev parent reply other threads:[~2005-04-28 20:39 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <E1DLM3u-0000IQ-Vj@lists.gnu.org>
2005-04-27 14:32 ` Eli Zaretskii
2005-04-27 14:36 ` Daniel Jacobowitz
2005-04-27 15:52 ` Eli Zaretskii
2005-04-27 17:43 ` Mark Kettenis
2005-04-28 7:10 ` Eli Zaretskii
2005-04-27 18:04 ` Daniel Jacobowitz
2005-04-28 7:05 ` Eli Zaretskii
2005-04-28 20:39 ` Eli Zaretskii [this message]
2005-04-28 20:42 ` Daniel Jacobowitz
2005-04-28 21:04 ` Eli Zaretskii
2005-04-28 21:18 ` Daniel Jacobowitz
2005-04-29 7:07 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='01c54c32$Blat.v2.4$26bfb1a0@zahav.net.il' \
--to=eliz@gnu.org \
--cc=bug-gdb@gnu.org \
--cc=bug-gdb@rich-paul.net \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox