diff options
author | Kostya Serebryany <kcc@google.com> | 2015-05-08 21:30:55 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-05-08 21:30:55 +0000 |
commit | 1ac8055bc7dd625bfe92f0d7f48f2ed6daa1ccda (patch) | |
tree | 233c190fb3b41cd28815d0bbe31c2e6b661df6d3 /llvm/lib/Fuzzer/FuzzerIO.cpp | |
parent | ae0254dabca242f69e2d534097df84f810c7a2d0 (diff) | |
download | llvm-1ac8055bc7dd625bfe92f0d7f48f2ed6daa1ccda.zip llvm-1ac8055bc7dd625bfe92f0d7f48f2ed6daa1ccda.tar.gz llvm-1ac8055bc7dd625bfe92f0d7f48f2ed6daa1ccda.tar.bz2 |
[lib/Fuzzer] use -fsanitize-coverage=trace-cmp when building LLVM with LLVM_USE_SANITIZE_COVERAGE; in lib/Fuzzer try to reload the corpus to pick up new units from other processes
llvm-svn: 236906
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerIO.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerIO.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerIO.cpp b/llvm/lib/Fuzzer/FuzzerIO.cpp index 81f37aa..7136d38 100644 --- a/llvm/lib/Fuzzer/FuzzerIO.cpp +++ b/llvm/lib/Fuzzer/FuzzerIO.cpp @@ -13,10 +13,26 @@ #include <iterator> #include <fstream> #include <dirent.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + namespace fuzzer { -static std::vector<std::string> ListFilesInDir(const std::string &Dir) { +static long GetEpoch(const std::string &Path) { + struct stat St; + if (stat(Path.c_str(), &St)) return 0; + return St.st_mtime; +} + +static std::vector<std::string> ListFilesInDir(const std::string &Dir, + long *Epoch) { std::vector<std::string> V; + if (Epoch) { + auto E = GetEpoch(Dir.c_str()); + if (*Epoch >= E) return V; + *Epoch = E; + } DIR *D = opendir(Dir.c_str()); if (!D) return V; while (auto E = readdir(D)) { @@ -50,9 +66,14 @@ void WriteToFile(const Unit &U, const std::string &Path) { OF.write((const char*)U.data(), U.size()); } -void ReadDirToVectorOfUnits(const char *Path, std::vector<Unit> *V) { - for (auto &X : ListFilesInDir(Path)) - V->push_back(FileToVector(DirPlusFile(Path, X))); +void ReadDirToVectorOfUnits(const char *Path, std::vector<Unit> *V, + long *Epoch) { + long E = Epoch ? *Epoch : 0; + for (auto &X : ListFilesInDir(Path, Epoch)) { + auto FilePath = DirPlusFile(Path, X); + if (Epoch && GetEpoch(FilePath) < E) continue; + V->push_back(FileToVector(FilePath)); + } } std::string DirPlusFile(const std::string &DirPath, |