| // Copyright 2021 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | // This header contains basic filesystem functions for use in unit tests and CLI | 
 | // tools.  Note that those are not 100% suitable for production use, as in, they | 
 | // might be prone to race conditions and not always handle non-ASCII filenames | 
 | // correctly. | 
 | #ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_FILE_UTILS_H_ | 
 | #define QUICHE_COMMON_PLATFORM_API_QUICHE_FILE_UTILS_H_ | 
 |  | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "absl/strings/string_view.h" | 
 | #include "absl/types/optional.h" | 
 |  | 
 | namespace quiche { | 
 |  | 
 | // Join two paths in a platform-specific way.  Returns |a| if |b| is empty, and | 
 | // vice versa. | 
 | std::string JoinPath(absl::string_view a, absl::string_view b); | 
 |  | 
 | // Reads the entire file into the memory. | 
 | absl::optional<std::string> ReadFileContents(absl::string_view file); | 
 |  | 
 | // Lists all files and directories in the directory specified by |path|. Returns | 
 | // true on success, false on failure. | 
 | bool EnumerateDirectory(absl::string_view path, | 
 |                         std::vector<std::string>& directories, | 
 |                         std::vector<std::string>& files); | 
 |  | 
 | // Recursively enumerates all of the files in the directory and all of the | 
 | // internal subdirectories.  Has a fairly small recursion limit. | 
 | bool EnumerateDirectoryRecursively(absl::string_view path, | 
 |                                    std::vector<std::string>& files); | 
 |  | 
 | }  // namespace quiche | 
 |  | 
 | #endif  // QUICHE_COMMON_PLATFORM_API_QUICHE_FILE_UTILS_H_ |