aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Willemsen <dan@danw.org>2018-02-07 12:55:50 -0800
committerGitHub <noreply@github.com>2018-02-07 12:55:50 -0800
commit054627c9ee92e6b0ef87e5ff3479b457d0c78bbe (patch)
treec792785956a8981d32179c0a028586234c5dc229
parent4c6ff1826c53f5b260903321548e286296cbd8f5 (diff)
parent23fa84358587eee87a45ff41f7559512c4549fb0 (diff)
downloadkati-054627c9ee92e6b0ef87e5ff3479b457d0c78bbe.tar.gz
Merge pull request #132 from danw/find_implicit_and
Support the implicit "-a" in find
-rw-r--r--find.cc16
-rw-r--r--testcase/find_command.mk1
2 files changed, 11 insertions, 6 deletions
diff --git a/find.cc b/find.cc
index 1b9e23f..1bf0b9e 100644
--- a/find.cc
+++ b/find.cc
@@ -526,12 +526,16 @@ class FindCommandParser {
while (true) {
if (!GetNextToken(&tok))
return NULL;
- if (tok != "-and" && tok != "-a") {
- UngetToken(tok);
- return c.release();
+ if (tok == "-and" || tok == "-a") {
+ if (!GetNextToken(&tok) || tok.empty())
+ return NULL;
+ } else {
+ if (tok != "-not" && tok != "\\!" && tok != "\\(" && tok != "-name" &&
+ tok != "-type") {
+ UngetToken(tok);
+ return c.release();
+ }
}
- if (!GetNextToken(&tok) || tok.empty())
- return NULL;
unique_ptr<FindCond> r(ParseFact(tok));
if (!r.get()) {
return NULL;
@@ -562,7 +566,7 @@ class FindCommandParser {
}
// <expr> ::= <term> {<or> <term>}
- // <term> ::= <fact> {<and> <fact>}
+ // <term> ::= <fact> {[<and>] <fact>}
// <fact> ::= <not> <fact> | '\(' <expr> '\)' | <pred>
// <not> ::= '-not' | '\!'
// <and> ::= '-and' | '-a'
diff --git a/testcase/find_command.mk b/testcase/find_command.mk
index c3e8a07..b714879 100644
--- a/testcase/find_command.mk
+++ b/testcase/find_command.mk
@@ -67,6 +67,7 @@ endif
$(call run_find, find testdir -name "file1")
$(call run_find, find testdir -name "file1")
$(call run_find, find testdir -name "*1")
+ $(call run_find, find testdir -name "*1" -name "file*")
$(call run_find, find testdir -name "*1" -and -name "file*")
$(call run_find, find testdir -name "*1" -or -name "file*")
$(call run_find, find testdir -name "*1" -or -type f)