From 731971ed4bd85104dd2ada14a5897d29d063966a Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Fri, 11 Nov 2011 19:52:46 +0000 Subject: [PATCH] PR gdb/12843 * linespec.c (locate_first_half): Keep ':' if it looks like it could be part of a Windows path starting with a drive letter. --- gdb/ChangeLog | 7 +++++++ gdb/linespec.c | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8aaf0dd..b601cbb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2011-11-11 Keith Seitz + + PR gdb/12843 + * linespec.c (locate_first_half): Keep ':' if it looks + like it could be part of a Windows path starting with + a drive letter. + 2011-11-10 Pedro Alves * linux-nat.c (linux_nat_wait): Don't force waking up the event diff --git a/gdb/linespec.c b/gdb/linespec.c index 37ec368..64ba837 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -43,6 +43,7 @@ #include "arch-utils.h" #include #include "cli/cli-utils.h" +#include "filenames.h" /* Prototypes for local functions. */ @@ -1194,6 +1195,16 @@ locate_first_half (char **argptr, int *is_quote_enclosed) ++p; } } + + + /* Check for a drive letter in the filename. This is done on all hosts + to capture cross-compilation environments. On Unixen, directory + separators are illegal in filenames, so if the user enters "e:/foo.c", + he is referring to a directory named "e:" and a source file named + "foo.c", and we still want to keep these two pieces together. */ + if (isalpha (p[0]) && p[1] == ':' && IS_DIR_SEPARATOR (p[2])) + p += 3; + for (; *p; p++) { if (p[0] == '<') -- 2.7.4