| #include "quiche/common/platform/api/quiche_file_utils.h" | |
| #include "quiche_platform_impl/quiche_file_utils_impl.h" | |
| namespace quiche { | |
| std::string JoinPath(absl::string_view a, absl::string_view b) { | |
| return JoinPathImpl(a, b); | |
| } | |
| absl::optional<std::string> ReadFileContents(absl::string_view file) { | |
| return ReadFileContentsImpl(file); | |
| } | |
| bool EnumerateDirectory(absl::string_view path, | |
| std::vector<std::string>& directories, | |
| std::vector<std::string>& files) { | |
| return EnumerateDirectoryImpl(path, directories, files); | |
| } | |
| bool EnumerateDirectoryRecursivelyInner(absl::string_view path, | |
| int recursion_limit, | |
| std::vector<std::string>& files) { | |
| if (recursion_limit < 0) { | |
| return false; | |
| } | |
| std::vector<std::string> local_files; | |
| std::vector<std::string> directories; | |
| if (!EnumerateDirectory(path, directories, local_files)) { | |
| return false; | |
| } | |
| for (const std::string& directory : directories) { | |
| if (!EnumerateDirectoryRecursivelyInner(JoinPath(path, directory), | |
| recursion_limit - 1, files)) { | |
| return false; | |
| } | |
| } | |
| for (const std::string& file : local_files) { | |
| files.push_back(JoinPath(path, file)); | |
| } | |
| return true; | |
| } | |
| bool EnumerateDirectoryRecursively(absl::string_view path, | |
| std::vector<std::string>& files) { | |
| constexpr int kRecursionLimit = 20; | |
| return EnumerateDirectoryRecursivelyInner(path, kRecursionLimit, files); | |
| } | |
| } // namespace quiche |