Support: Have directory_iterator::status() return FindFirstFileEx/FindNextFile results on Windows.
This allows clients to avoid an unnecessary fs::status() call on each directory entry. Because the information returned by FindFirstFileEx is a subset of the information returned by a regular status() call, I needed to extract a base class from file_status that contains only that information. On my machine, this reduces the time required to enumerate a ThinLTO cache directory containing 520k files from almost 4 minutes to less than 2 seconds. Differential Revision: https://reviews.llvm.org/D38716 llvm-svn: 315378
This commit is contained in:
@@ -244,7 +244,7 @@ public:
|
||||
RealFSDirIter(const Twine &Path, std::error_code &EC) : Iter(Path, EC) {
|
||||
if (!EC && Iter != llvm::sys::fs::directory_iterator()) {
|
||||
llvm::sys::fs::file_status S;
|
||||
EC = Iter->status(S);
|
||||
EC = llvm::sys::fs::status(Iter->path(), S, true);
|
||||
CurrentEntry = Status::copyWithNewName(S, Iter->path());
|
||||
}
|
||||
}
|
||||
@@ -258,7 +258,7 @@ public:
|
||||
CurrentEntry = Status();
|
||||
} else {
|
||||
llvm::sys::fs::file_status S;
|
||||
EC = Iter->status(S);
|
||||
EC = llvm::sys::fs::status(Iter->path(), S, true);
|
||||
CurrentEntry = Status::copyWithNewName(S, Iter->path());
|
||||
}
|
||||
return EC;
|
||||
|
||||
Reference in New Issue
Block a user