Index: tools/gn/label.cc |
diff --git a/tools/gn/label.cc b/tools/gn/label.cc |
index 095128d81e2014856e9bee4d4e45ebd509f0c162..89cd3356c1bc302b64d9389a18f1f86ecc5537f4 100644 |
--- a/tools/gn/label.cc |
+++ b/tools/gn/label.cc |
@@ -5,7 +5,9 @@ |
#include "tools/gn/label.h" |
#include "base/logging.h" |
+#include "base/strings/string_util.h" |
#include "tools/gn/err.h" |
+#include "tools/gn/filesystem_utils.h" |
#include "tools/gn/parse_tree.h" |
#include "tools/gn/value.h" |
@@ -93,8 +95,23 @@ bool Resolve(const SourceDir& current_dir, |
Err* err) { |
// To workaround the problem that StringPiece operator[] doesn't return a ref. |
const char* input_str = input.data(); |
- |
- size_t path_separator = input.find_first_of(":("); |
+ size_t offset = 0; |
+#if defined(OS_WIN) |
+ if (IsPathAbsolute(input)) { |
+ if (input[0] != '/') { |
+ *err = Err(original_value, "Bad absolute path.", |
+ "Absolute paths must be of the form /C:\\ but this is \"" + |
+ input.as_string() + "\"."); |
+ return false; |
+ } |
+ if (input.size() > 3 && input[2] == ':' && IsSlash(input[3]) && |
+ IsAsciiAlpha(input[1])) { |
+ // Skip over the drive letter colon. |
+ offset = 3; |
+ } |
+ } |
+#endif |
+ size_t path_separator = input.find_first_of(":(", offset); |
base::StringPiece location_piece; |
base::StringPiece name_piece; |
base::StringPiece toolchain_piece; |