diff options
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerIO.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerIO.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerIO.cpp b/llvm/lib/Fuzzer/FuzzerIO.cpp index e956b3eb91e..a70af886c2b 100644 --- a/llvm/lib/Fuzzer/FuzzerIO.cpp +++ b/llvm/lib/Fuzzer/FuzzerIO.cpp @@ -60,9 +60,9 @@ static void ListFilesInDirRecursive(const std::string &Dir, long *Epoch, *Epoch = E; } -Unit FileToVector(const std::string &Path, size_t MaxSize) { +Unit FileToVector(const std::string &Path, size_t MaxSize, bool ExitOnError) { std::ifstream T(Path); - if (!T) { + if (ExitOnError && !T) { Printf("No such directory: %s; exiting\n", Path.c_str()); exit(1); } @@ -78,6 +78,10 @@ Unit FileToVector(const std::string &Path, size_t MaxSize) { return Res; } +void DeleteFile(const std::string &Path) { + unlink(Path.c_str()); +} + std::string FileToString(const std::string &Path) { std::ifstream T(Path); return std::string((std::istreambuf_iterator<char>(T)), @@ -97,7 +101,7 @@ void WriteToFile(const Unit &U, const std::string &Path) { } void ReadDirToVectorOfUnits(const char *Path, std::vector<Unit> *V, - long *Epoch, size_t MaxSize) { + long *Epoch, size_t MaxSize, bool ExitOnError) { long E = Epoch ? *Epoch : 0; std::vector<std::string> Files; ListFilesInDirRecursive(Path, Epoch, &Files, /*TopDir*/true); @@ -108,7 +112,9 @@ void ReadDirToVectorOfUnits(const char *Path, std::vector<Unit> *V, NumLoaded++; if ((NumLoaded & (NumLoaded - 1)) == 0 && NumLoaded >= 1024) Printf("Loaded %zd/%zd files from %s\n", NumLoaded, Files.size(), Path); - V->push_back(FileToVector(X, MaxSize)); + auto S = FileToVector(X, MaxSize, ExitOnError); + if (!S.empty()) + V->push_back(S); } } |