summaryrefslogtreecommitdiffstats
path: root/src/depfile_parser.in.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-12-19 19:14:35 (GMT)
committerEvan Martin <martine@danga.com>2011-12-19 19:18:47 (GMT)
commitbbf180d581ada47011c66c735bffdd87cddd0bd1 (patch)
treeeee9a168a0d1ba0f786d1a78bd10d59b82172aa6 /src/depfile_parser.in.cc
parent8b929cf7c82b5ff84a874c5a25e919446c3874d5 (diff)
downloadNinja-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.cc15
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;
}