PR gdb/12843
authorKeith Seitz <keiths@redhat.com>
Fri, 11 Nov 2011 19:52:46 +0000 (19:52 +0000)
committerKeith Seitz <keiths@redhat.com>
Fri, 11 Nov 2011 19:52:46 +0000 (19:52 +0000)
* 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
gdb/linespec.c

index 8aaf0dd..b601cbb 100644 (file)
@@ -1,3 +1,10 @@
+2011-11-11  Keith Seitz  <keiths@redhat.com>
+
+       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  <pedro@codesourcery.com>
 
        * linux-nat.c (linux_nat_wait): Don't force waking up the event
index 37ec368..64ba837 100644 (file)
@@ -43,6 +43,7 @@
 #include "arch-utils.h"
 #include <ctype.h>
 #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] == '<')