From 3e1d69ea2aa9fda99e50b63293432446b46d72fc Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 1 Jan 2024 16:56:46 +0100 Subject: [PATCH] chore: support `map_file` without size argument --- include/dwarfs/os_access.h | 2 ++ include/dwarfs/os_access_generic.h | 2 ++ src/dwarfs/os_access_generic.cpp | 4 ++++ test/mmap_mock.h | 11 +++++++++-- test/test_helpers.cpp | 25 ++++++++++++++++--------- test/test_helpers.h | 2 ++ 6 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/dwarfs/os_access.h b/include/dwarfs/os_access.h index 97584312..6cdc64f4 100644 --- a/include/dwarfs/os_access.h +++ b/include/dwarfs/os_access.h @@ -48,6 +48,8 @@ class os_access { virtual std::filesystem::path read_symlink(std::filesystem::path const& path) const = 0; virtual std::unique_ptr + map_file(std::filesystem::path const& path) const = 0; + virtual std::unique_ptr map_file(std::filesystem::path const& path, size_t size) const = 0; virtual int access(std::filesystem::path const& path, int mode) const = 0; virtual std::filesystem::path diff --git a/include/dwarfs/os_access_generic.h b/include/dwarfs/os_access_generic.h index 9750e9bb..c5e6f3eb 100644 --- a/include/dwarfs/os_access_generic.h +++ b/include/dwarfs/os_access_generic.h @@ -41,6 +41,8 @@ class os_access_generic : public os_access { std::filesystem::path read_symlink(std::filesystem::path const& path) const override; std::unique_ptr + map_file(std::filesystem::path const& path) const override; + std::unique_ptr map_file(std::filesystem::path const& path, size_t size) const override; int access(std::filesystem::path const& path, int mode) const override; std::filesystem::path diff --git a/src/dwarfs/os_access_generic.cpp b/src/dwarfs/os_access_generic.cpp index fd68391a..89c8e6ba 100644 --- a/src/dwarfs/os_access_generic.cpp +++ b/src/dwarfs/os_access_generic.cpp @@ -67,6 +67,10 @@ fs::path os_access_generic::read_symlink(fs::path const& path) const { return fs::read_symlink(path); } +std::unique_ptr os_access_generic::map_file(fs::path const& path) const { + return std::make_unique(path); +} + std::unique_ptr os_access_generic::map_file(fs::path const& path, size_t size) const { return std::make_unique(path, size); diff --git a/test/mmap_mock.h b/test/mmap_mock.h index 9df10e14..58c0f7ac 100644 --- a/test/mmap_mock.h +++ b/test/mmap_mock.h @@ -27,13 +27,20 @@ namespace test { class mmap_mock : public mmif { public: mmap_mock(const std::string& data) - : data_(data) - , path_{""} {} + : mmap_mock{data, ""} {} mmap_mock(const std::string& data, std::filesystem::path const& path) : data_{data} , path_{path} {} + mmap_mock(const std::string& data, size_t size) + : mmap_mock{data, size, ""} {} + + mmap_mock(const std::string& data, size_t size, + std::filesystem::path const& path) + : data_{data, 0, std::min(size, data.size())} + , path_{path} {} + void const* addr() const override { return data_.data(); } size_t size() const override { return data_.size(); } diff --git a/test/test_helpers.cpp b/test/test_helpers.cpp index 7cea420c..7e5188ae 100644 --- a/test/test_helpers.cpp +++ b/test/test_helpers.cpp @@ -425,20 +425,27 @@ std::unique_ptr os_access_mock::map_file(fs::path const& path, size_t size) const { if (auto de = find(path); de && de->status.type() == posix_file_type::regular) { - return std::make_unique(std::visit( - overloaded{ - [this](std::string const& str) { return str; }, - [this](std::function const& fun) { return fun(); }, - [this](auto const&) -> std::string { - throw std::runtime_error("oops in overloaded"); - }, - }, - de->v)); + return std::make_unique( + std::visit(overloaded{ + [this](std::string const& str) { return str; }, + [this](std::function const& fun) { + return fun(); + }, + [this](auto const&) -> std::string { + throw std::runtime_error("oops in overloaded"); + }, + }, + de->v), + size); } throw std::runtime_error(fmt::format("oops in map_file: {}", path.string())); } +std::unique_ptr os_access_mock::map_file(fs::path const& path) const { + return map_file(path, std::numeric_limits::max()); +} + int os_access_mock::access(fs::path const& path, int) const { return access_fail_set_.count(path) ? -1 : 0; } diff --git a/test/test_helpers.h b/test/test_helpers.h index 7f55d36d..06d4f0fb 100644 --- a/test/test_helpers.h +++ b/test/test_helpers.h @@ -101,6 +101,8 @@ class os_access_mock : public os_access { std::filesystem::path read_symlink(std::filesystem::path const& path) const override; + std::unique_ptr + map_file(std::filesystem::path const& path) const override; std::unique_ptr map_file(std::filesystem::path const& path, size_t size) const override;