summaryrefslogtreecommitdiffstats
path: root/parse.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2017-08-12 18:12:13 -0400
committerTavian Barnes <tavianator@tavianator.com>2017-08-12 18:12:13 -0400
commitacd7f7ed437793e7c67ecd869cfac32a87c1ec52 (patch)
treeabfb1561c90aca00362fb0f99b8a8da4a70fe08a /parse.c
parent01a754bc5572103f9a49242d756dc04b0e86bb6e (diff)
downloadbfs-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.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/parse.c b/parse.c
index 2ba0602..ef252fb 100644
--- a/parse.c
+++ b/parse.c
@@ -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));
}