diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-02-05 17:28:44 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-02-05 19:04:25 -0500 |
commit | d8444e1ec6a51b53da55149a2d4a6847185d000d (patch) | |
tree | 946c9710a73b3cd26efc809a6af3f9157f1f2839 | |
parent | a6f94c132c425bbab543e98fcd19f4ff7519d1b7 (diff) |
bftw: Compute nameoff correctly for the root in BFTW_DEPTH mode
-rw-r--r-- | bftw.c | 6 | ||||
-rwxr-xr-x | tests.sh | 6 | ||||
-rw-r--r-- | tests/test_0138.out | 1 |
3 files changed, 11 insertions, 2 deletions
@@ -777,10 +777,14 @@ static void bftw_init_buffers(struct bftw_state *state, const struct dirent *de) dircache_entry_base(&state->cache, current, &ftwbuf->at_fd, &ftwbuf->at_path); } } else { - ftwbuf->nameoff = basename_offset(ftwbuf->path); ftwbuf->depth = 0; } + if (ftwbuf->depth == 0) { + // Compute the name offset for root paths like "foo/bar" + ftwbuf->nameoff = basename_offset(ftwbuf->path); + } + ftwbuf->typeflag = BFTW_UNKNOWN; if (de) { ftwbuf_use_dirent(ftwbuf, de); @@ -837,9 +837,13 @@ function test_0137() { bfs_diff basic -maxdepth 0 -printf '\18\118\1118\11118\n\cfoo' } +function test_0138() { + bfs_diff basic/g -depth -name g +} + result=0 -for i in {1..137}; do +for i in {1..138}; do test="test_$(printf '%04d' $i)" if [ -t 1 ]; then diff --git a/tests/test_0138.out b/tests/test_0138.out new file mode 100644 index 0000000..cf4d5a9 --- /dev/null +++ b/tests/test_0138.out @@ -0,0 +1 @@ +basic/g |