Article View: gnu.gdb.bug
Article #1266[RFA] Fix file name generation in edit_command (was: Ver 6.3 edit command failing)
From: Eli Zaretskii
Date: Wed, 27 Apr 2005 14:30
Date: Wed, 27 Apr 2005 14:30
81 lines
4552 bytes
4552 bytes
> Date: Tue, 12 Apr 2005 09:58:25 -0400
> From: bug-gdb@rich-paul.net
>
> While using gdb 6.3, I was having a problem with the directory name and the
> file name being concatenated by the edit command without an intervening slash.
> My solution was just to add the slash to the sprintf format string
> in cli/cli-cmds.c, near line 650. It worked for me.
Thanks for pointing this out.
In fact, the code there had quite a few problems besides the one you
found: it didn't use symtab->fullname, failed miserably for DOS-style
d:/foo/bar file names, etc.
Does anyone object to the following patch?
2005-04-27 Eli Zaretskii <eliz@gnu.org>
* cli/cli-cmds.c (edit_command): Use symtab->fullname if
possible. Use IS_ABSOLUTE_PATH instead of checking for a literal
'/'. Make sure there's a slash between the directory and the file
name. Simplify and clarify the code logic.
--- gdb/cli/cli-cmds.c~0 2005-03-26 16:18:14.000000000 +0300
+++ gdb/cli/cli-cmds.c 2005-04-27 17:14:46.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, *dn;
/* Pull in the current default source line if necessary */
if (arg == 0)
@@ -627,23 +627,33 @@ 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;
-
+ dn = "";
+ if (NULL != sal.symtab->fullname)
+ fn = sal.symtab->fullname;
+ else if (NULL == sal.symtab->filename)
+ {
+ fn = "unknown";
+ if (NULL != sal.symtab->dirname)
+ dn = sal.symtab->dirname;
+ }
+ else if (IS_ABSOLUTE_PATH (sal.symtab->filename))
+ fn = sal.symtab->filename;
+ else
+ {
+ fn = sal.symtab->filename;
+ dn = sal.symtab->dirname;
+ if (NULL == dn)
+ dn = ".";
+ }
+ /* $EDITOR blank +NN blank dir / file \0 */
+ cmdlen = strlen(editor) + 1 + log10 + 2 + strlen(dn) + 1 + 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%s%s", editor, sal.line, dn, (*dn ? "/" : ""), fn);
shell_escape(p, from_tty);
xfree(p);
Technical Details
Message-ID:
<mailman.3183.1114612404.2895.bug-gdb@gnu.org>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!newsfeed.stanford.edu!shelby.stanford.edu!not-for-mailReferences:
<E1DLM3u-0000IQ-Vj@lists.gnu.org>Show Full Headers
Complete Article Headers
X-Google-Thread: f5053,f951753e39b033fe,start X-Google-Attributes: gidf5053,public X-Google-Language: ENGLISH,ASCII-7-bit Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!newsfeed.stanford.edu!shelby.stanford.edu!not-for-mail From: "Eli Zaretskii" <eliz@gnu.org> Newsgroups: gnu.gdb.bug Subject: [RFA] Fix file name generation in edit_command (was: Ver 6.3 edit command failing) Date: Wed, 27 Apr 2005 17:30:11 +0300 Lines: 83 Sender: halo1@zahav.net.il Approved: bug-gdb@gnu.org Message-ID: <mailman.3183.1114612404.2895.bug-gdb@gnu.org> References: <E1DLM3u-0000IQ-Vj@lists.gnu.org> Reply-To: Eli Zaretskii <eliz@gnu.org> NNTP-Posting-Host: lists.gnu.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7BIT X-Trace: news.Stanford.EDU 1114612363 22013 199.232.76.165 (27 Apr 2005 14:32:43 GMT) X-Complaints-To: news@news.stanford.edu Cc: gdb-patches@sources.redhat.com, bug-gdb@gnu.org To: bug-gdb@rich-paul.net Envelope-to: bug-gdb@gnu.org X-Mailer: emacs 22.0.50 (via feedmail 8 I) and Blat ver 2.4 In-reply-to: <E1DLM3u-0000IQ-Vj@lists.gnu.org> (bug-gdb@rich-paul.net) X-BeenThere: bug-gdb@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GDB, the GNU debugger" <bug-gdb.gnu.org> List-Unsubscribe: <http://lists.gnu.org/mailman/listinfo/bug-gdb>, <mailto:bug-gdb-request@gnu.org?subject=unsubscribe> List-Archive: <http://lists.gnu.org/pipermail/bug-gdb> List-Post: <mailto:bug-gdb@gnu.org> List-Help: <mailto:bug-gdb-request@gnu.org?subject=help> List-Subscribe: <http://lists.gnu.org/mailman/listinfo/bug-gdb>, <mailto:bug-gdb-request@gnu.org?subject=subscribe>