diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2021-03-10 10:32:58 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2021-03-10 10:32:58 -0500 |
commit | 75950323dcf086e89e23e923fa1e2bd31f1c2f62 (patch) | |
tree | 447052f910b5ab638ad26ac2d7a8d7030368b4be /bftw.c | |
parent | f979df9ab11a2d7bbc6be15bd1f2734510bb4cb4 (diff) | |
download | bfs-75950323dcf086e89e23e923fa1e2bd31f1c2f62.tar.xz |
bftw: Fix bftw_type() for broken links and BFS_STAT_FOLLOW
This fixes link target coloring for broken links with -L.
Diffstat (limited to 'bftw.c')
-rw-r--r-- | bftw.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -698,12 +698,20 @@ const struct bfs_stat *bftw_cached_stat(const struct BFTW *ftwbuf, enum bfs_stat } enum bfs_type bftw_type(const struct BFTW *ftwbuf, enum bfs_stat_flags flags) { - if (ftwbuf->stat_flags & BFS_STAT_NOFOLLOW) { - if ((flags & BFS_STAT_NOFOLLOW) || ftwbuf->type != BFS_LNK) { + if (flags & BFS_STAT_NOFOLLOW) { + if (ftwbuf->type == BFS_LNK || (ftwbuf->stat_flags & BFS_STAT_NOFOLLOW)) { + return ftwbuf->type; + } + } else if (flags & BFS_STAT_TRYFOLLOW) { + if (ftwbuf->type != BFS_LNK || (ftwbuf->stat_flags & BFS_STAT_TRYFOLLOW)) { + return ftwbuf->type; + } + } else { + if (ftwbuf->type != BFS_LNK) { return ftwbuf->type; + } else if (ftwbuf->stat_flags & BFS_STAT_TRYFOLLOW) { + return BFS_ERROR; } - } else if ((flags & (BFS_STAT_NOFOLLOW | BFS_STAT_TRYFOLLOW)) == BFS_STAT_TRYFOLLOW || ftwbuf->type == BFS_LNK) { - return ftwbuf->type; } const struct bfs_stat *statbuf = bftw_stat(ftwbuf, flags); |