in fuzzing/replay/file_util.cc [37:64]
absl::Status TraverseDirectory(
absl::string_view path,
absl::FunctionRef<void(absl::string_view, const struct stat&)> callback) {
DIR* dir = opendir(std::string(path).c_str());
if (!dir) {
return ErrnoStatus(absl::StrCat("could not open directory ", path), errno);
}
absl::Status status = absl::OkStatus();
while (true) {
errno = 0;
struct dirent* entry = readdir(dir);
if (!entry) {
if (errno) {
status.Update(ErrnoStatus(
absl::StrCat("could not complete directory traversal for ", path),
errno));
}
break;
}
if (absl::StartsWith(entry->d_name, ".")) {
continue;
}
const std::string entry_path = absl::StrCat(path, "/", entry->d_name);
status.Update(YieldFiles(entry_path, callback));
}
closedir(dir);
return status;
}