From 7b1c49bca18986e94d358d8ebb069dc01470be15 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 14 Feb 2020 14:40:23 -0500 Subject: eval: Irregular files aren't empty GNU find's -empty returns false for devices, sockets, etc., even though their st_size is 0. Match that behaviour. --- eval.c | 2 +- tests.sh | 6 +++++- tests/test_empty_special.out | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tests/test_empty_special.out diff --git a/eval.c b/eval.c index 23c7b1b..010fef9 100644 --- a/eval.c +++ b/eval.c @@ -433,7 +433,7 @@ bool eval_empty(const struct expr *expr, struct eval_state *state) { } closedir(dir); - } else { + } else if (ftwbuf->typeflag == BFTW_REG) { const struct bfs_stat *statbuf = eval_stat(state); if (statbuf) { ret = statbuf->size == 0; diff --git a/tests.sh b/tests.sh index d1c5413..2a52049 100755 --- a/tests.sh +++ b/tests.sh @@ -432,7 +432,7 @@ gnu_tests=( test_depth_maxdepth_2 test_empty - + test_empty_special test_exec_nothing test_exec_substring @@ -1106,6 +1106,10 @@ function test_empty() { bfs_diff basic -empty } +function test_empty_special() { + bfs_diff rainbow -empty +} + function test_gid() { bfs_diff basic -gid "$(id -g)" } diff --git a/tests/test_empty_special.out b/tests/test_empty_special.out new file mode 100644 index 0000000..3927f2b --- /dev/null +++ b/tests/test_empty_special.out @@ -0,0 +1,14 @@ +rainbow/exec.sh +rainbow/file.dat +rainbow/file.txt +rainbow/mh1 +rainbow/mh2 +rainbow/ow +rainbow/sgid +rainbow/star.gz +rainbow/star.tar +rainbow/star.tar.gz +rainbow/sticky +rainbow/sticky_ow +rainbow/sugid +rainbow/suid -- cgit v1.2.3