|  | // 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 <optional> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "absl/strings/string_view.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. | 
|  | std::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_ |