diff options
author | Nico Weber <thakis@chromium.org> | 2014-11-24 17:37:47 (GMT) |
---|---|---|
committer | Nico Weber <thakis@chromium.org> | 2014-11-24 17:37:47 (GMT) |
commit | 3309498174411e02e7680ea8b470bb7d1d70bdb8 (patch) | |
tree | 2c84adc7263350e6929dca36d778ea7e29fe5cc5 /src/includes_normalize-win32.cc | |
parent | 85e13c163d0129216fb382df6a53d11393c4c0c2 (diff) | |
parent | b532cab080bbde2068ab49aba814c7176111681f (diff) | |
download | Ninja-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.cc | 21 |
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); |