aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg_Files.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-04-08 16:26:26 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-04-08 16:26:26 -0700
commitc434dc99868989ca55aef5e445ac6a0a4c3430f7 (patch)
treeacfe66565a39a364b541013671ae786f2b5f7de4 /toolsrc/src/vcpkg_Files.cpp
parent19123677d111143dcbe0b168f4af90771be302cb (diff)
downloadvcpkg-c434dc99868989ca55aef5e445ac6a0a4c3430f7.tar.gz
vcpkg-c434dc99868989ca55aef5e445ac6a0a4c3430f7.zip
[vcpkg] Initial addition of Filesystem abstraction to enable testing.
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)