summaryrefslogtreecommitdiffstats
path: root/src/includes_normalize-win32.cc
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2014-11-24 17:37:47 (GMT)
committerNico Weber <thakis@chromium.org>2014-11-24 17:37:47 (GMT)
commit3309498174411e02e7680ea8b470bb7d1d70bdb8 (patch)
tree2c84adc7263350e6929dca36d778ea7e29fe5cc5 /src/includes_normalize-win32.cc
parent85e13c163d0129216fb382df6a53d11393c4c0c2 (diff)
parentb532cab080bbde2068ab49aba814c7176111681f (diff)
downloadNinja-1.5.3.zip
Ninja-1.5.3.tar.gz
Ninja-1.5.3.tar.bz2
v1.5.3v1.5.3
Diffstat (limited to 'src/includes_normalize-win32.cc')
-rw-r--r--src/includes_normalize-win32.cc21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/includes_normalize-win32.cc b/src/includes_normalize-win32.cc
index 05ce75d..1e88a0a 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,17 @@ 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());
- }
+ unsigned int slash_bits;
+ if (!CanonicalizePath(copy, &len, &slash_bits, &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);