From 8fad779ae21b1052268af0befa930c75d1dd780b Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sun, 18 Dec 2016 18:35:33 -0500 Subject: Implement BSD find's -depth N --- parse.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'parse.c') diff --git a/parse.c b/parse.c index 8d865e8..1af73cb 100644 --- a/parse.c +++ b/parse.c @@ -831,6 +831,23 @@ static struct expr *parse_depth(struct parser_state *state, int arg1, int arg2) return parse_nullary_option(state); } +/** + * Parse -depth [N]. + */ +static struct expr *parse_depth_n(struct parser_state *state, int arg1, int arg2) { + const char *arg = state->argv[1]; + if (arg) { + while (*arg == '-' || *arg == '+') { + ++arg; + } + if (*arg >= '0' && *arg <= '9') { + return parse_test_icmp(state, eval_depth); + } + } + + return parse_depth(state, arg1, arg2); +} + /** * Parse -{min,max}depth N. */ @@ -1800,7 +1817,7 @@ static const struct table_entry parse_table[] = { {"d", false, parse_depth}, {"daystart", false, parse_daystart}, {"delete", false, parse_delete}, - {"depth", false, parse_depth}, + {"depth", false, parse_depth_n}, {"empty", false, parse_empty}, {"exec", false, parse_exec, 0}, {"execdir", false, parse_exec, EXEC_CHDIR}, -- cgit v1.2.3