summaryrefslogtreecommitdiff
path: root/io/ftw.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-03-06 07:30:01 +0000
committerJakub Jelinek <jakub@redhat.com>2006-03-06 07:30:01 +0000
commitb3643a38588a0d7217ef933735b9cf142ccdbf2d (patch)
treedfd2d46a4adfdb376f8a8632289e117055f0e039 /io/ftw.c
parent51d2f6dd7f5c5a2838e864f7d5795f3110536b6d (diff)
Updated to fedora-glibc-20060306T0720
Diffstat (limited to 'io/ftw.c')
-rw-r--r--io/ftw.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/io/ftw.c b/io/ftw.c
index 50303d9cd0..e96076a203 100644
--- a/io/ftw.c
+++ b/io/ftw.c
@@ -419,13 +419,22 @@ process_entry (struct ftw_data *data, struct dir_data *dir, const char *name,
{
if (errno != EACCES && errno != ENOENT)
result = -1;
- else if (!(data->flags & FTW_PHYS)
- && (d_type == DT_LNK
- || (LXSTAT (_STAT_VER, name, &st) == 0
- && S_ISLNK (st.st_mode))))
+ else if (data->flags & FTW_PHYS)
+ flag = FTW_NS;
+ else if (d_type == DT_LNK)
flag = FTW_SLN;
else
- flag = FTW_NS;
+ {
+ if (dir->streamfd != -1)
+ statres = FXSTATAT (_STAT_VER, dir->streamfd, name, &st,
+ AT_SYMLINK_NOFOLLOW);
+ else
+ statres = LXSTAT (_STAT_VER, name, &st);
+ if (statres == 0 && S_ISLNK (st.st_mode))
+ flag = FTW_SLN;
+ else
+ flag = FTW_NS;
+ }
}
else
{