From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16955 invoked by alias); 27 Apr 2005 14:32:36 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16798 invoked from network); 27 Apr 2005 14:32:24 -0000 Received: from unknown (HELO legolas.inter.net.il) (192.114.186.24) by sourceware.org with SMTP; 27 Apr 2005 14:32:24 -0000 Received: from zaretski (IGLD-80-230-41-251.inter.net.il [80.230.41.251]) by legolas.inter.net.il (MOS 3.5.6-GR) with ESMTP id EGB02661 (AUTH halo1); Wed, 27 Apr 2005 17:31:55 +0300 (IDT) Date: Wed, 27 Apr 2005 14:32:00 -0000 From: "Eli Zaretskii" To: bug-gdb@rich-paul.net Message-ID: <01c54b35$Blat.v2.4$c3f52520@zahav.net.il> Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=ISO-8859-1 CC: bug-gdb@gnu.org, gdb-patches@sources.redhat.com In-reply-to: (bug-gdb@rich-paul.net) Subject: [RFA] Fix file name generation in edit_command (was: Ver 6.3 edit command failing) Reply-to: Eli Zaretskii References: X-SW-Source: 2005-04/txt/msg00354.txt.bz2 > 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 * 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);