From 037361965a14e1899020bf16c9112936e39020e8 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 5 Mar 2016 13:53:40 -0500 Subject: Implement -used. This doesn't agree with find's output, but I think find is buggy here. For example, find -used +0 is returning fewer results than find -used 1, which makes no sense given that 1 is greater than 0. --- bfs.h | 1 + eval.c | 15 +++++++++++++++ parse.c | 2 ++ 3 files changed, 18 insertions(+) diff --git a/bfs.h b/bfs.h index 3a85650..1e38869 100644 --- a/bfs.h +++ b/bfs.h @@ -187,6 +187,7 @@ bool eval_access(const struct expr *expr, struct eval_state *state); bool eval_acmtime(const struct expr *expr, struct eval_state *state); bool eval_acnewer(const struct expr *expr, struct eval_state *state); +bool eval_used(const struct expr *expr, struct eval_state *state); bool eval_gid(const struct expr *expr, struct eval_state *state); bool eval_uid(const struct expr *expr, struct eval_state *state); diff --git a/eval.c b/eval.c index 81d2de7..aae82cd 100644 --- a/eval.c +++ b/eval.c @@ -173,6 +173,21 @@ bool eval_acnewer(const struct expr *expr, struct eval_state *state) { || (time->tv_sec == expr->reftime.tv_sec && time->tv_nsec > expr->reftime.tv_nsec); } +/** + * -used test. + */ +bool eval_used(const struct expr *expr, struct eval_state *state) { + const struct stat *statbuf = fill_statbuf(state); + if (!statbuf) { + return false; + } + + time_t diff = timespec_diff(&statbuf->st_atim, &statbuf->st_ctim); + diff /= 60*60*24; + printf("%d\n", (int)diff); + return do_cmp(expr, diff); +} + /** * -gid test. */ diff --git a/parse.c b/parse.c index 2fc4fd8..154d566 100644 --- a/parse.c +++ b/parse.c @@ -1065,6 +1065,8 @@ static struct expr *parse_literal(struct parser_state *state) { case 'u': if (strcmp(arg, "-uid") == 0) { return parse_test_icmp(state, eval_uid); + } else if (strcmp(arg, "-used") == 0) { + return parse_test_icmp(state, eval_used); } else if (strcmp(arg, "-user") == 0) { return parse_user(state); } -- cgit v1.2.3