aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg_Files.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg_Files.cpp')
-rw-r--r--toolsrc/src/vcpkg_Files.cpp51
1 files changed, 30 insertions, 21 deletions
diff --git a/toolsrc/src/vcpkg_Files.cpp b/toolsrc/src/vcpkg_Files.cpp
index 2669a9333..ece6ed474 100644
--- a/toolsrc/src/vcpkg_Files.cpp
+++ b/toolsrc/src/vcpkg_Files.cpp
@@ -6,34 +6,43 @@ namespace vcpkg::Files
{
static const std::regex FILESYSTEM_INVALID_CHARACTERS_REGEX = std::regex(R"([\/:*?"<>|])");
- bool has_invalid_chars_for_filesystem(const std::string& s)
- {
- return std::regex_search(s, FILESYSTEM_INVALID_CHARACTERS_REGEX);
- }
-
- Expected<std::string> read_contents(const fs::path& file_path) noexcept
+ struct RealFilesystem : Filesystem
{
- std::fstream file_stream(file_path, std::ios_base::in | std::ios_base::binary);
- if (file_stream.fail())
+ Expected<std::string> read_contents(const fs::path& file_path) noexcept override
{
- return std::errc::no_such_file_or_directory;
- }
+ std::fstream file_stream(file_path, std::ios_base::in | std::ios_base::binary);
+ if (file_stream.fail())
+ {
+ return std::errc::no_such_file_or_directory;
+ }
- file_stream.seekg(0, file_stream.end);
- auto length = file_stream.tellg();
- file_stream.seekg(0, file_stream.beg);
+ file_stream.seekg(0, file_stream.end);
+ auto length = file_stream.tellg();
+ file_stream.seekg(0, file_stream.beg);
- if (length > SIZE_MAX)
- {
- return std::errc::file_too_large;
+ if (length > SIZE_MAX)
+ {
+ return std::errc::file_too_large;
+ }
+
+ std::string output;
+ output.resize(static_cast<size_t>(length));
+ file_stream.read(&output[0], length);
+ file_stream.close();
+
+ return std::move(output);
}
+ };
- std::string output;
- output.resize(static_cast<size_t>(length));
- file_stream.read(&output[0], length);
- file_stream.close();
+ Filesystem & get_real_filesystem()
+ {
+ static RealFilesystem real_fs;
+ return real_fs;
+ }
- return std::move(output);
+ bool has_invalid_chars_for_filesystem(const std::string& s)
+ {
+ return std::regex_search(s, FILESYSTEM_INVALID_CHARACTERS_REGEX);
}
Expected<std::vector<std::string>> read_all_lines(const fs::path& file_path)