summaryrefslogtreecommitdiffstats
path: root/src/includes_normalize-win32.cc
diff options
context:
space:
mode:
authorScott Graham <scottmg@chromium.org>2014-10-30 22:34:25 (GMT)
committerScott Graham <scottmg@chromium.org>2014-10-30 22:34:25 (GMT)
commit65151e7eefce514febd0a9676c5363c6d4c54b66 (patch)
tree8458820f009b6a20b00adeb129d5055b281d2386 /src/includes_normalize-win32.cc
parentb92c1a4fd731df4c1a408023cd0d0b691bf79f2f (diff)
downloadNinja-65151e7eefce514febd0a9676c5363c6d4c54b66.zip
Ninja-65151e7eefce514febd0a9676c5363c6d4c54b66.tar.gz
Ninja-65151e7eefce514febd0a9676c5363c6d4c54b66.tar.bz2
CanonicalizePath handles \ on Windows
Diffstat (limited to 'src/includes_normalize-win32.cc')
-rw-r--r--src/includes_normalize-win32.cc20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/includes_normalize-win32.cc b/src/includes_normalize-win32.cc
index 05ce75d..0d230f8 100644
--- a/src/includes_normalize-win32.cc
+++ b/src/includes_normalize-win32.cc
@@ -68,12 +68,15 @@ string IncludesNormalize::ToLower(const string& s) {
string IncludesNormalize::AbsPath(StringPiece s) {
char result[_MAX_PATH];
GetFullPathName(s.AsString().c_str(), sizeof(result), result, NULL);
+ for (char* c = result; *c; ++c)
+ if (*c == '\\')
+ *c = '/';
return result;
}
string IncludesNormalize::Relativize(StringPiece path, const string& start) {
- vector<string> start_list = Split(AbsPath(start), '\\');
- vector<string> path_list = Split(AbsPath(path), '\\');
+ vector<string> start_list = Split(AbsPath(start), '/');
+ vector<string> path_list = Split(AbsPath(path), '/');
int i;
for (i = 0; i < static_cast<int>(min(start_list.size(), path_list.size()));
++i) {
@@ -88,7 +91,7 @@ string IncludesNormalize::Relativize(StringPiece path, const string& start) {
rel_list.push_back(path_list[j]);
if (rel_list.size() == 0)
return ".";
- return Join(rel_list, '\\');
+ return Join(rel_list, '/');
}
string IncludesNormalize::Normalize(const string& input,
@@ -96,19 +99,16 @@ string IncludesNormalize::Normalize(const string& input,
char copy[_MAX_PATH];
size_t len = input.size();
strncpy(copy, input.c_str(), input.size() + 1);
- for (size_t j = 0; j < len; ++j)
- if (copy[j] == '/')
- copy[j] = '\\';
string err;
- if (!CanonicalizePath(copy, &len, &err)) {
- Warning("couldn't canonicalize '%s: %s\n", input.c_str(), err.c_str());
- }
+ if (!CanonicalizePath(copy, &len, &err))
+ Warning("couldn't canonicalize '%s': %s\n", input.c_str(), err.c_str());
+ StringPiece partially_fixed(copy, len);
+
string curdir;
if (!relative_to) {
curdir = AbsPath(".");
relative_to = curdir.c_str();
}
- StringPiece partially_fixed(copy, len);
if (!SameDrive(partially_fixed, relative_to))
return partially_fixed.AsString();
return Relativize(partially_fixed, relative_to);