From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25289 invoked by alias); 12 Apr 2010 17:31:46 -0000 Received: (qmail 25278 invoked by uid 22791); 12 Apr 2010 17:31:45 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SARE_MSGID_LONG45,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 12 Apr 2010 17:31:40 +0000 Received: from kpbe15.cbf.corp.google.com (kpbe15.cbf.corp.google.com [172.25.105.79]) by smtp-out.google.com with ESMTP id o3CHVaKZ006260 for ; Mon, 12 Apr 2010 19:31:36 +0200 Received: from pwi2 (pwi2.prod.google.com [10.241.219.2]) by kpbe15.cbf.corp.google.com with ESMTP id o3CHVYtL002481 for ; Mon, 12 Apr 2010 10:31:35 -0700 Received: by pwi2 with SMTP id 2so5773195pwi.0 for ; Mon, 12 Apr 2010 10:31:34 -0700 (PDT) MIME-Version: 1.0 Received: by 10.140.247.17 with HTTP; Mon, 12 Apr 2010 10:31:34 -0700 (PDT) In-Reply-To: References: <20100406215751.7EC1784397@ruffy.mtv.corp.google.com> <8339z512xz.fsf@gnu.org> <83mxxczfha.fsf@gnu.org> <83iq80zali.fsf@gnu.org> Date: Mon, 12 Apr 2010 17:31:00 -0000 Received: by 10.140.248.13 with SMTP id v13mr3754888rvh.25.1271093494552; Mon, 12 Apr 2010 10:31:34 -0700 (PDT) Message-ID: Subject: Re: [RFA] Add -s option to source command. From: Doug Evans To: Eli Zaretskii Cc: tromey@redhat.com, gdb-patches@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-04/txt/msg00368.txt.bz2 On Fri, Apr 9, 2010 at 12:49 PM, Doug Evans wrote: > On Fri, Apr 9, 2010 at 12:31 PM, Eli Zaretskii wrote: >>> Date: Fri, 9 Apr 2010 11:12:27 -0700 >>> From: Doug Evans >>> Cc: tromey@redhat.com, gdb-patches@sourceware.org >>> >>> > This is fine, but what if @var{filename} is @file{d:/foo/myscript} (on >>> > Windows)? >>> >>> source.c:openp() doesn't handle that case, it just blindly concatenates. >>> [presumably because it hasn't needed to] >>> >>> I don't have an opinion on what *should* happen here. >>> Possibilities are to either not try or remove the drive spec. >> >> My vote is for removing the drive letter. =A0The other alternative means >> that absolute file names are handled inconsistently across platforms >> (I assume that not trying to look for absolute file name on Posix >> platforms will not be a useful behavior). [note: filenames.h uses the term "semi-absolute" for d:foo] I don't have an opinion on whether to treat d:/foo vs d:foo differently in this context. > I can make a case for either choice on Posix platforms: ie. whether to > search or to not search. =A0I don't know which is better, but openp() > already does the search for absolute path names (if > OPF_SEARCH_IN_PATH is specified), so I lean towards not introducing > something new. > > Does anyone know if there's existing code to strip a drive letter if pres= ent? > [It's trivial to do - but I fear the discussion involved in getting a > patch in that does it The Right Way.] > I'm all for stripping the drive letter if it's agreeable to everyone else. I will send this to the binutils list for approval tomorrow, unless someone has a better suggestion. openp would then check HAVE_DRIVE_SPEC (path) and if true call STRIP_DRIVE_SPEC (path) before concatenating the search path with the user-provided path. I put these macros in filenames.h because that's where IS_ABSOLUTE_PATH and IS_DIR_SEPARATOR live. 2010-04-12 Doug Evans * filenames.h (HAVE_DRIVE_SPEC, STRIP_DRIVE_SPEC): New macros. Index: filenames.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/include/filenames.h,v retrieving revision 1.5 diff -u -p -r1.5 filenames.h --- filenames.h 21 Mar 2008 23:40:18 -0000 1.5 +++ filenames.h 12 Apr 2010 17:19:32 -0000 @@ -5,7 +5,7 @@ use forward- and back-slash in path names interchangeably, and some of them have case-insensitive file names. - Copyright 2000, 2001, 2007 Free Software Foundation, Inc. + Copyright 2000, 2001, 2007, 2010 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -37,17 +37,27 @@ extern "C" { #endif #define IS_DIR_SEPARATOR(c) ((c) =3D=3D '/' || (c) =3D=3D '\\') + +#define HAVE_DRIVE_SPEC(f) (((f)[0]) && ((f)[1] =3D=3D ':')) + +/* Remove the drive spec from F, assuming HAVE_DRIVE_SPEC (f). + The result is a pointer to the remainder of F. */ +#define STRIP_DRIVE_SPEC(f) ((f) + 2) + /* Note that IS_ABSOLUTE_PATH accepts d:foo as well, although it is only semi-absolute. This is because the users of IS_ABSOLUTE_PATH want to know whether to prepend the current working directory to a file name, which should not be done with a name like d:foo. */ -#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] =3D=3D ':'))) +#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || HAVE_DRIVE_SPE= C(f)) #else /* not DOSish */ #define IS_DIR_SEPARATOR(c) ((c) =3D=3D '/') #define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0])) +#define HAVE_DRIVE_SPEC(f) (0) +#define STRIP_DRIVE_SPEC(f) (f) + #endif /* not DOSish */ extern int filename_cmp (const char *s1, const char *s2);