summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-05-17 23:35:32 (GMT)
committerEvan Martin <martine@danga.com>2011-05-17 23:35:32 (GMT)
commitb4bebb7ead0461529c9ff26cbb3db6b77a2643be (patch)
tree269503e6025d3e21c7ade2564eae4eeab89cef2f
parent078f97b672b1b0f4293d8640a9ed4830c47c92ef (diff)
downloadNinja-b4bebb7ead0461529c9ff26cbb3db6b77a2643be.zip
Ninja-b4bebb7ead0461529c9ff26cbb3db6b77a2643be.tar.gz
Ninja-b4bebb7ead0461529c9ff26cbb3db6b77a2643be.tar.bz2
don't mangle absolute paths in the canonicalizer
We frequently do use absolute paths when depfiles refer to e.g. /usr/include/stdio.h.
-rw-r--r--src/util.cc2
-rw-r--r--src/util_test.cc8
2 files changed, 9 insertions, 1 deletions
diff --git a/src/util.cc b/src/util.cc
index e48c277..63d3800 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -79,7 +79,7 @@ bool CanonicalizePath(string* path, string* err) {
string::size_type end = path->find('/', start);
if (end == string::npos)
end = path->size();
- if (end > start) {
+ if (end == 0 || end > start) {
if (parts_count == kMaxPathComponents) {
*err = "can't canonicalize path '" + *path + "'; too many "
"path components";
diff --git a/src/util_test.cc b/src/util_test.cc
index 4b4c760..87b614c 100644
--- a/src/util_test.cc
+++ b/src/util_test.cc
@@ -53,3 +53,11 @@ TEST(CanonicalizePath, PathSamples) {
EXPECT_EQ("can't canonicalize path './x/../foo/../../bar.h' that reaches "
"above its directory", err);
}
+
+TEST(CanonicalizePath, AbsolutePath) {
+ string path = "/usr/include/stdio.h";
+ string err = "";
+ EXPECT_TRUE(CanonicalizePath(&path, &err));
+ EXPECT_EQ("", err);
+ EXPECT_EQ("/usr/include/stdio.h", path);
+}