diff options
author | Nico Weber <nicolasweber@gmx.de> | 2016-04-27 19:17:10 (GMT) |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2016-04-27 19:17:10 (GMT) |
commit | a60702e1b0a4f108e16bb4c03f7fd1c821e5ad1d (patch) | |
tree | 096eff77f63235157d529d749cc6d67199856f1d /src/includes_normalize-win32.cc | |
parent | 484c16336f19bd8970bb6e75322d61b92a229899 (diff) | |
parent | 06b0e568f62d228837e96c485447f55da1ae9b5d (diff) | |
download | Ninja-a60702e1b0a4f108e16bb4c03f7fd1c821e5ad1d.zip Ninja-a60702e1b0a4f108e16bb4c03f7fd1c821e5ad1d.tar.gz Ninja-a60702e1b0a4f108e16bb4c03f7fd1c821e5ad1d.tar.bz2 |
v1.7.0v1.7.0
Diffstat (limited to 'src/includes_normalize-win32.cc')
-rw-r--r-- | src/includes_normalize-win32.cc | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/includes_normalize-win32.cc b/src/includes_normalize-win32.cc index 1e88a0a..ca35012 100644 --- a/src/includes_normalize-win32.cc +++ b/src/includes_normalize-win32.cc @@ -94,15 +94,18 @@ string IncludesNormalize::Relativize(StringPiece path, const string& start) { return Join(rel_list, '/'); } -string IncludesNormalize::Normalize(const string& input, - const char* relative_to) { - char copy[_MAX_PATH]; +bool IncludesNormalize::Normalize(const string& input, const char* relative_to, + string* result, string* err) { + char copy[_MAX_PATH + 1]; size_t len = input.size(); + if (len > _MAX_PATH) { + *err = "path too long"; + return false; + } strncpy(copy, input.c_str(), input.size() + 1); - string err; unsigned int slash_bits; - if (!CanonicalizePath(copy, &len, &slash_bits, &err)) - Warning("couldn't canonicalize '%s': %s\n", input.c_str(), err.c_str()); + if (!CanonicalizePath(copy, &len, &slash_bits, err)) + return false; StringPiece partially_fixed(copy, len); string curdir; @@ -110,7 +113,10 @@ string IncludesNormalize::Normalize(const string& input, curdir = AbsPath("."); relative_to = curdir.c_str(); } - if (!SameDrive(partially_fixed, relative_to)) - return partially_fixed.AsString(); - return Relativize(partially_fixed, relative_to); + if (!SameDrive(partially_fixed, relative_to)) { + *result = partially_fixed.AsString(); + return true; + } + *result = Relativize(partially_fixed, relative_to); + return true; } |