diff options
author | Evan Martin <martine@danga.com> | 2011-12-19 19:14:35 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2011-12-19 19:18:47 (GMT) |
commit | bbf180d581ada47011c66c735bffdd87cddd0bd1 (patch) | |
tree | eee9a168a0d1ba0f786d1a78bd10d59b82172aa6 /src/depfile_parser.in.cc | |
parent | 8b929cf7c82b5ff84a874c5a25e919446c3874d5 (diff) | |
download | Ninja-bbf180d581ada47011c66c735bffdd87cddd0bd1.zip Ninja-bbf180d581ada47011c66c735bffdd87cddd0bd1.tar.gz Ninja-bbf180d581ada47011c66c735bffdd87cddd0bd1.tar.bz2 |
handle backslashes and isolated colons in depfile parser
The logic was wrong if the input looked like
foo : bar baz
with a space before the colon.
Test from Frances <frances.buontempo@gmail.com>.
Diffstat (limited to 'src/depfile_parser.in.cc')
-rw-r--r-- | src/depfile_parser.in.cc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/depfile_parser.in.cc b/src/depfile_parser.in.cc index 3d9a77e..8c04bdd 100644 --- a/src/depfile_parser.in.cc +++ b/src/depfile_parser.in.cc @@ -48,12 +48,19 @@ bool DepfileParser::Parse(const string& content, string* err) { '\\\n' { continue; } [ \n]* { continue; } - [a-zA-Z0-9+,/_:.-]+ { + [a-zA-Z0-9+,/\\_:.-]+ { // Got a filename. - if (p[-1] == ':') { - out_ = StringPiece(start, p - start - 1); + int len = p - start;; + if (start[len] == ':') + len--; // Strip off trailing colon, if any. + + if (len == 0) + continue; // Drop isolated colons. + + if (!out_.str_) { + out_ = StringPiece(start, len); } else { - ins_.push_back(StringPiece(start, p - start)); + ins_.push_back(StringPiece(start, len)); } continue; } |