From: Weixie Cui <[email protected]> -anewer was incorrectly using mtime for both the reference file and the comparison. Fix to use atime for both, and add a regression test.
Signed-off-by: Weixie Cui <[email protected]> --- find/parser.c | 4 ++-- tests/find/newer.sh | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/find/parser.c b/find/parser.c index 054c2892..068c7dac 100644 --- a/find/parser.c +++ b/find/parser.c @@ -791,9 +791,9 @@ parse_anewer (const struct parser_table* entry, char **argv, int *arg_ptr) { struct predicate *our_pred = insert_primary (entry, arg); our_pred->args.reftime.xval = XVAL_ATIME; - our_pred->args.reftime.ts = get_stat_mtime (&stat_newer); + our_pred->args.reftime.ts = get_stat_atime (&stat_newer); our_pred->args.reftime.kind = COMP_GT; - our_pred->est_success_rate = estimate_timestamp_success_rate (stat_newer.st_mtime); + our_pred->est_success_rate = estimate_timestamp_success_rate (get_stat_atime (&stat_newer).tv_sec); return true; } return false; diff --git a/tests/find/newer.sh b/tests/find/newer.sh index 6cfc42b1..8e408ea1 100755 --- a/tests/find/newer.sh +++ b/tests/find/newer.sh @@ -62,4 +62,17 @@ else echo "Determining reference timestamp failed - skipping this part." fi +# Regression test: -anewer must compare atime with reference file's atime, +# not mtime. With ref.atime=2020, ref.mtime=2026, file.atime=2023: +# -anewer ref should match file (2023 > 2020). Do not stat ref between +# setting its atime and running find, or atime would be updated. +rm -f "$TMPDIR/ref" "$TMPDIR/file" || framework_failure_ +touch -d "2026-01-01" "$TMPDIR/ref" || skip_ "touch -d failed" +touch -a -d "2020-01-01" "$TMPDIR/ref" || skip_ "touch -a -d failed" +touch "$TMPDIR/file" || framework_failure_ +touch -a -d "2023-01-01" "$TMPDIR/file" || skip_ "touch -a -d failed" +echo "$TMPDIR/file" > exp-anewer || framework_failure_ +find "$TMPDIR" -maxdepth 1 -anewer "$TMPDIR/ref" -name file -print > out || fail=1 +compare exp-anewer out || fail=1 + Exit $fail -- 2.39.5 (Apple Git-154)
