diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-04-08 16:26:26 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-04-08 16:26:26 -0700 |
| commit | c434dc99868989ca55aef5e445ac6a0a4c3430f7 (patch) | |
| tree | acfe66565a39a364b541013671ae786f2b5f7de4 /toolsrc/src/vcpkg_Files.cpp | |
| parent | 19123677d111143dcbe0b168f4af90771be302cb (diff) | |
| download | vcpkg-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.cpp | 51 |
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) |
