diff options
author | Peter Kuemmel <syntheticpp@gmx.net> | 2012-08-16 13:26:33 (GMT) |
---|---|---|
committer | Peter Kuemmel <syntheticpp@gmx.net> | 2012-08-17 02:57:38 (GMT) |
commit | ee44a510f448d130948380bd26926d3b17f5f11d (patch) | |
tree | ba770ec451beab0d7c6039a91fce4c83d3a25458 | |
parent | a9b7ae497faec86d5e413b46bb0b98c16a361c79 (diff) | |
download | Ninja-ee44a510f448d130948380bd26926d3b17f5f11d.zip Ninja-ee44a510f448d130948380bd26926d3b17f5f11d.tar.gz Ninja-ee44a510f448d130948380bd26926d3b17f5f11d.tar.bz2 |
on windows a network path starts with two backslashes
-rw-r--r-- | src/util.cc | 11 | ||||
-rw-r--r-- | src/util_test.cc | 16 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/util.cc b/src/util.cc index 7c2f895..4bd34e6 100644 --- a/src/util.cc +++ b/src/util.cc @@ -110,8 +110,19 @@ bool CanonicalizePath(char* path, int* len, string* err) { const char* end = start + *len; if (*src == '/') { +#ifdef _WIN32 + // network path starts with // + if (*len > 1 && *(src + 1) == '/') { + src += 2; + dst += 2; + } else { + ++src; + ++dst; + } +#else ++src; ++dst; +#endif } while (src < end) { diff --git a/src/util_test.cc b/src/util_test.cc index 5ace5e7..17e2704 100644 --- a/src/util_test.cc +++ b/src/util_test.cc @@ -66,6 +66,22 @@ TEST(CanonicalizePath, PathSamples) { path = "foo/.hidden_bar"; EXPECT_TRUE(CanonicalizePath(&path, &err)); EXPECT_EQ("foo/.hidden_bar", path); + + path = "/foo"; + EXPECT_TRUE(CanonicalizePath(&path, &err)); + EXPECT_EQ("/foo", path); + + path = "//foo"; + EXPECT_TRUE(CanonicalizePath(&path, &err)); +#ifdef _WIN32 + EXPECT_EQ("//foo", path); +#else + EXPECT_EQ("/foo", path); +#endif + + path = "/"; + EXPECT_TRUE(CanonicalizePath(&path, &err)); + EXPECT_EQ("", path); } TEST(CanonicalizePath, EmptyResult) { |