mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Ignore dangling symlinks in getDirectoryContents()
Thanks to Markus Oberhumer for the patch! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21370 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4b2afe6394
commit
4619c75f64
@ -398,17 +398,22 @@ Path::getDirectoryContents(std::set<Path>& result) const {
|
||||
|
||||
result.clear();
|
||||
struct dirent* de = ::readdir(direntries);
|
||||
while (de != 0) {
|
||||
for ( ; de != 0; de = ::readdir(direntries)) {
|
||||
if (de->d_name[0] != '.') {
|
||||
Path aPath(path + (const char*)de->d_name);
|
||||
struct stat buf;
|
||||
if (0 != stat(aPath.path.c_str(), &buf))
|
||||
if (0 != stat(aPath.path.c_str(), &buf)) {
|
||||
int saved_errno = errno;
|
||||
struct stat st;
|
||||
if (0 == lstat(aPath.path.c_str(), &st) && S_ISLNK(st.st_mode))
|
||||
continue; // dangling symlink -- ignore
|
||||
errno = saved_errno;
|
||||
ThrowErrno(aPath.path + ": can't get status");
|
||||
}
|
||||
if (S_ISDIR(buf.st_mode))
|
||||
aPath.path += "/";
|
||||
result.insert(aPath);
|
||||
}
|
||||
de = ::readdir(direntries);
|
||||
}
|
||||
|
||||
closedir(direntries);
|
||||
|
Loading…
Reference in New Issue
Block a user