diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2024-05-27 13:37:49 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2024-05-27 14:04:39 -0400 |
commit | f095481862ccd175d297da67d0e313d135bd75c3 (patch) | |
tree | a98a6c1bce4e0eed3c844794b882707b5bc7396d /src/eval.c | |
parent | 92a4f07352c6afd7b02785f94249daa2ad693bdd (diff) | |
download | bfs-f095481862ccd175d297da67d0e313d135bd75c3.tar.xz |
eval: Print more information on filesystem loops
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -1433,10 +1433,20 @@ static enum bftw_action eval_callback(const struct BFTW *ftwbuf, void *ptr) { } if (ftwbuf->type == BFS_ERROR) { - if (!eval_should_ignore(&state, ftwbuf->error)) { - eval_error(&state, "%s.\n", xstrerror(ftwbuf->error)); - } state.action = BFTW_PRUNE; + + if (ftwbuf->error == ELOOP && ftwbuf->loopoff > 0) { + char *loop = strndup(ftwbuf->path, ftwbuf->loopoff); + if (loop) { + eval_error(&state, "Filesystem loop back to ${di}%pq${rs}\n", loop); + free(loop); + goto done; + } + } else if (eval_should_ignore(&state, ftwbuf->error)) { + goto done; + } + + eval_error(&state, "%s.\n", xstrerror(ftwbuf->error)); goto done; } |