xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/common/platform/api/quiche_file_utils.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #include "quiche/common/platform/api/quiche_file_utils.h"
2 
3 #include <optional>
4 
5 #include "quiche_platform_impl/quiche_file_utils_impl.h"
6 
7 namespace quiche {
8 
JoinPath(absl::string_view a,absl::string_view b)9 std::string JoinPath(absl::string_view a, absl::string_view b) {
10   return JoinPathImpl(a, b);
11 }
12 
ReadFileContents(absl::string_view file)13 std::optional<std::string> ReadFileContents(absl::string_view file) {
14   return ReadFileContentsImpl(file);
15 }
16 
EnumerateDirectory(absl::string_view path,std::vector<std::string> & directories,std::vector<std::string> & files)17 bool EnumerateDirectory(absl::string_view path,
18                         std::vector<std::string>& directories,
19                         std::vector<std::string>& files) {
20   return EnumerateDirectoryImpl(path, directories, files);
21 }
22 
EnumerateDirectoryRecursivelyInner(absl::string_view path,int recursion_limit,std::vector<std::string> & files)23 bool EnumerateDirectoryRecursivelyInner(absl::string_view path,
24                                         int recursion_limit,
25                                         std::vector<std::string>& files) {
26   if (recursion_limit < 0) {
27     return false;
28   }
29 
30   std::vector<std::string> local_files;
31   std::vector<std::string> directories;
32   if (!EnumerateDirectory(path, directories, local_files)) {
33     return false;
34   }
35   for (const std::string& directory : directories) {
36     if (!EnumerateDirectoryRecursivelyInner(JoinPath(path, directory),
37                                             recursion_limit - 1, files)) {
38       return false;
39     }
40   }
41   for (const std::string& file : local_files) {
42     files.push_back(JoinPath(path, file));
43   }
44   return true;
45 }
46 
EnumerateDirectoryRecursively(absl::string_view path,std::vector<std::string> & files)47 bool EnumerateDirectoryRecursively(absl::string_view path,
48                                    std::vector<std::string>& files) {
49   constexpr int kRecursionLimit = 20;
50   return EnumerateDirectoryRecursivelyInner(path, kRecursionLimit, files);
51 }
52 
53 }  // namespace quiche
54