diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2024-06-03 18:34:01 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2024-06-03 18:34:01 -0400 |
commit | 32d252598e855829ebdc657e635f93270600b5a2 (patch) | |
tree | 32da4f1dc5d66cd6600fe427a8ca4a45309cef9f /src/eval.c | |
parent | 6fcc0f217e3352e4f935f3e66a62c1cf7073dcb9 (diff) | |
parent | 9e408d4bb50cb7c4e9d0a007b95f9fb9d32a16d0 (diff) | |
download | bfs-32d252598e855829ebdc657e635f93270600b5a2.tar.xz |
Merge branch 'revert-eloop'
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -999,6 +999,13 @@ bool eval_xtype(const struct bfs_expr *expr, struct bfs_eval *state) { const struct BFTW *ftwbuf = state->ftwbuf; enum bfs_stat_flags flags = ftwbuf->stat_flags ^ (BFS_STAT_NOFOLLOW | BFS_STAT_TRYFOLLOW); enum bfs_type type = bftw_type(ftwbuf, flags); + + // GNU find treats ELOOP as a broken symbolic link for -xtype l + // (but not -L -type l) + if ((flags & BFS_STAT_TRYFOLLOW) && type == BFS_ERROR && errno == ELOOP) { + type = BFS_LNK; + } + if (type == BFS_ERROR) { eval_report_error(state); return false; |