absl::Status TraverseDirectory()

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;
}