diff options
author | Scott Graham <scottmg@chromium.org> | 2015-06-18 22:52:25 (GMT) |
---|---|---|
committer | Scott Graham <scottmg@chromium.org> | 2015-06-18 22:52:25 (GMT) |
commit | 312c6aa131943408e9a0268c11806369f84063e3 (patch) | |
tree | 3a6351e50bf8748ce69d1ec749b5bb9c5ebed6b6 /src | |
parent | fd4b140467887be6cb96154d28b9636fe387c69d (diff) | |
download | Ninja-312c6aa131943408e9a0268c11806369f84063e3.zip Ninja-312c6aa131943408e9a0268c11806369f84063e3.tar.gz Ninja-312c6aa131943408e9a0268c11806369f84063e3.tar.bz2 |
don't alias input/output in ExtractDeps (i.e. actually works now)
Diffstat (limited to 'src')
-rw-r--r-- | src/build.cc | 4 | ||||
-rw-r--r-- | src/msvc_helper-win32.cc | 2 | ||||
-rw-r--r-- | src/msvc_helper.h | 5 |
3 files changed, 8 insertions, 3 deletions
diff --git a/src/build.cc b/src/build.cc index fcde626..e4820d0 100644 --- a/src/build.cc +++ b/src/build.cc @@ -849,8 +849,10 @@ bool Builder::ExtractDeps(CommandRunner::Result* result, #ifdef _WIN32 if (deps_type == "msvc") { CLParser parser; - if (!parser.Parse(result->output, deps_prefix, &result->output, err)) + string output; + if (!parser.Parse(result->output, deps_prefix, &output, err)) return false; + result->output = output; for (set<string>::iterator i = parser.includes_.begin(); i != parser.includes_.end(); ++i) { // ~0 is assuming that with MSVC-parsed headers, it's ok to always make diff --git a/src/msvc_helper-win32.cc b/src/msvc_helper-win32.cc index 78b79b0..d516240 100644 --- a/src/msvc_helper-win32.cc +++ b/src/msvc_helper-win32.cc @@ -15,6 +15,7 @@ #include "msvc_helper.h" #include <algorithm> +#include <assert.h> #include <stdio.h> #include <string.h> #include <windows.h> @@ -85,6 +86,7 @@ bool CLParser::FilterInputFilename(string line) { bool CLParser::Parse(const string& output, const string& deps_prefix, string* filtered_output, string* err) { // Loop over all lines in the output to process them. + assert(&output != filtered_output); size_t start = 0; while (start < output.size()) { size_t end = output.find_first_of("\r\n", start); diff --git a/src/msvc_helper.h b/src/msvc_helper.h index 08c0ad5..30f87f3 100644 --- a/src/msvc_helper.h +++ b/src/msvc_helper.h @@ -40,8 +40,9 @@ struct CLParser { /// Exposed for testing. static bool FilterInputFilename(string line); - /// Parse the full output of cl, returning the output (if any) that - /// should printed. Returns true on success, or false with err filled. + /// Parse the full output of cl, filling filtered_output with the text that + /// should be printed (if any). Returns true on success, or false with err + /// filled. output must not be the same object as filtered_object. bool Parse(const string& output, const string& deps_prefix, string* filtered_output, string* err); |