diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-08-12 18:12:13 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-08-12 18:12:13 -0400 |
commit | acd7f7ed437793e7c67ecd869cfac32a87c1ec52 (patch) | |
tree | abfb1561c90aca00362fb0f99b8a8da4a70fe08a /parse.c | |
parent | 01a754bc5572103f9a49242d756dc04b0e86bb6e (diff) | |
download | bfs-acd7f7ed437793e7c67ecd869cfac32a87c1ec52.tar.xz |
Unify broken symlink handling
Rather than open-code the fallback logic for broken symlinks everywhere
it's needed, introduce a new xfstatat() utility function that performs
the fallback automatically.
Using xfstatat() consistently fixes a few bugs, including cases where
broken symlinks are given as arguments to predicates like -samefile.
Diffstat (limited to 'parse.c')
-rw-r--r-- | parse.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -345,7 +345,7 @@ static int stat_arg(const struct parser_state *state, struct expr *expr, struct bool follow = cmdline->flags & (BFTW_COMFOLLOW | BFTW_LOGICAL); int flags = follow ? 0 : AT_SYMLINK_NOFOLLOW; - int ret = fstatat(AT_FDCWD, expr->sdata, sb, flags); + int ret = xfstatat(AT_FDCWD, expr->sdata, sb, &flags); if (ret != 0) { cfprintf(cmdline->cerr, "%{er}error: '%s': %s%{rs}\n", expr->sdata, strerror(errno)); } |