This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] Add -s option to source command.


On Fri, Apr 9, 2010 at 12:49 PM, Doug Evans <dje@google.com> wrote:
> On Fri, Apr 9, 2010 at 12:31 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>>> Date: Fri, 9 Apr 2010 11:12:27 -0700
>>> From: Doug Evans <dje@google.com>
>>> 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. ?The 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. ?I 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 present?
> [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  <dje@google.com>

        * filenames.h (HAVE_DRIVE_SPEC, STRIP_DRIVE_SPEC): New macros.

Index: filenames.h
===================================================================
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) == '/' || (c) == '\\')
+
+#define HAVE_DRIVE_SPEC(f)     (((f)[0]) && ((f)[1] == ':'))
+
+/* 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] == ':')))
+#define IS_ABSOLUTE_PATH(f)    (IS_DIR_SEPARATOR((f)[0]) || HAVE_DRIVE_SPEC(f))

 #else  /* not DOSish */

 #define IS_DIR_SEPARATOR(c)    ((c) == '/')
 #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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]