[libFuzzer] factor out some code into GetSizedFilesFromDir; NFC
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/fuzzer@313081 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/FuzzerLoop.cpp b/FuzzerLoop.cpp
index d6185fd..ec12602 100644
--- a/FuzzerLoop.cpp
+++ b/FuzzerLoop.cpp
@@ -597,26 +597,21 @@
void Fuzzer::ReadAndExecuteSeedCorpora(const Vector<std::string> &CorpusDirs) {
const size_t kMaxSaneLen = 1 << 20;
const size_t kMinDefaultLen = 4096;
- struct SizedFile {
- std::string File;
- size_t Size;
- };
Vector<SizedFile> SizedFiles;
size_t MaxSize = 0;
size_t MinSize = -1;
size_t TotalSize = 0;
+ size_t LastNumFiles = 0;
for (auto &Dir : CorpusDirs) {
- Vector<std::string> Files;
- ListFilesInDirRecursive(Dir, 0, &Files, /*TopDir*/true);
- Printf("INFO: % 8zd files found in %s\n", Files.size(), Dir.c_str());
- for (auto &File : Files) {
- if (size_t Size = FileSize(File)) {
- MaxSize = Max(Size, MaxSize);
- MinSize = Min(Size, MinSize);
- TotalSize += Size;
- SizedFiles.push_back({File, Size});
- }
- }
+ GetSizedFilesFromDir(Dir, &SizedFiles);
+ Printf("INFO: % 8zd files found in %s\n", SizedFiles.size() - LastNumFiles,
+ Dir.c_str());
+ LastNumFiles = SizedFiles.size();
+ }
+ for (auto &File : SizedFiles) {
+ MaxSize = Max(File.Size, MaxSize);
+ MinSize = Min(File.Size, MinSize);
+ TotalSize += File.Size;
}
if (Options.MaxLen == 0)
SetMaxInputLen(std::min(std::max(kMinDefaultLen, MaxSize), kMaxSaneLen));
@@ -633,10 +628,10 @@
if (Options.ShuffleAtStartUp)
std::shuffle(SizedFiles.begin(), SizedFiles.end(), MD.GetRand());
- if (Options.PreferSmall)
- std::stable_sort(
- SizedFiles.begin(), SizedFiles.end(),
- [](const SizedFile &A, const SizedFile &B) { return A.Size < B.Size; });
+ if (Options.PreferSmall) {
+ std::stable_sort(SizedFiles.begin(), SizedFiles.end());
+ assert(SizedFiles.front().Size <= SizedFiles.back().Size);
+ }
// Load and execute inputs one by one.
for (auto &SF : SizedFiles) {