diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2020-02-14 14:40:23 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2020-02-14 14:40:23 -0500 |
commit | 7b1c49bca18986e94d358d8ebb069dc01470be15 (patch) | |
tree | d744dd9c5727c2f14145c4e4ca726936c8132790 | |
parent | c7d3d9f6e2fd903788320dd7d0fedbf4c540c9f4 (diff) | |
download | bfs-7b1c49bca18986e94d358d8ebb069dc01470be15.tar.xz |
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.
-rw-r--r-- | eval.c | 2 | ||||
-rwxr-xr-x | tests.sh | 6 | ||||
-rw-r--r-- | tests/test_empty_special.out | 14 |
3 files changed, 20 insertions, 2 deletions
@@ -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; @@ -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 |