From d20ed07066ea5f185362e6d6484bbf2992026063 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Wed, 9 Oct 2024 13:41:32 -0500 Subject: [PATCH] fix --- .../drives/remote/remote_open_file_table.hpp | 10 +++++----- .../include/file_manager/file_manager.hpp | 10 ++++++++-- .../include/file_manager/i_open_file.hpp | 10 ++++++++-- .../librepertory/include/types/repertory.hpp | 2 +- .../src/drives/winfsp/winfsp_drive.cpp | 3 ++- .../file_manager_open_file_base.cpp | 18 +++++++++++++++--- .../include/mocks/mock_open_file.hpp | 12 +++++++++--- 7 files changed, 48 insertions(+), 17 deletions(-) diff --git a/repertory/librepertory/include/drives/remote/remote_open_file_table.hpp b/repertory/librepertory/include/drives/remote/remote_open_file_table.hpp index ed88e86a..45072bee 100644 --- a/repertory/librepertory/include/drives/remote/remote_open_file_table.hpp +++ b/repertory/librepertory/include/drives/remote/remote_open_file_table.hpp @@ -34,15 +34,15 @@ protected: protected: struct compat_open_info { - std::size_t count = 0u; - std::string client_id = ""; + std::size_t count{0U}; + std::string client_id; std::string path; }; struct open_info { - std::size_t count = 0u; - std::string client_id = ""; - PVOID directory_buffer = nullptr; + std::size_t count{0U}; + std::string client_id; + PVOID directory_buffer{nullptr}; std::string path; }; diff --git a/repertory/librepertory/include/file_manager/file_manager.hpp b/repertory/librepertory/include/file_manager/file_manager.hpp index 1e985f823..56fc13b9 100644 --- a/repertory/librepertory/include/file_manager/file_manager.hpp +++ b/repertory/librepertory/include/file_manager/file_manager.hpp @@ -172,10 +172,16 @@ public: get_handles() const -> std::vector override; [[nodiscard]] auto - get_open_data() const -> std::map override; + get_open_data() -> std::map & override; + + [[nodiscard]] auto get_open_data() const + -> const std::map & override; [[nodiscard]] auto - get_open_data(std::uint64_t handle) const -> open_file_data override; + get_open_data(std::uint64_t handle) -> open_file_data & override; + + [[nodiscard]] auto get_open_data(std::uint64_t handle) const + -> const open_file_data & override; [[nodiscard]] auto get_open_file_count() const -> std::size_t override; diff --git a/repertory/librepertory/include/file_manager/i_open_file.hpp b/repertory/librepertory/include/file_manager/i_open_file.hpp index 82a08a02..28988d6c 100644 --- a/repertory/librepertory/include/file_manager/i_open_file.hpp +++ b/repertory/librepertory/include/file_manager/i_open_file.hpp @@ -41,10 +41,16 @@ public: [[nodiscard]] virtual auto get_filesystem_item() const -> filesystem_item = 0; [[nodiscard]] virtual auto - get_open_data() const -> std::map = 0; + get_open_data() -> std::map & = 0; [[nodiscard]] virtual auto - get_open_data(std::uint64_t handle) const -> open_file_data = 0; + get_open_data() const -> const std::map & = 0; + + [[nodiscard]] virtual auto + get_open_data(std::uint64_t handle) -> open_file_data & = 0; + + [[nodiscard]] virtual auto + get_open_data(std::uint64_t handle) const -> const open_file_data & = 0; [[nodiscard]] virtual auto get_open_file_count() const -> std::size_t = 0; diff --git a/repertory/librepertory/include/types/repertory.hpp b/repertory/librepertory/include/types/repertory.hpp index 6d949096..a06be51a 100644 --- a/repertory/librepertory/include/types/repertory.hpp +++ b/repertory/librepertory/include/types/repertory.hpp @@ -150,7 +150,7 @@ enum class provider_type : std::size_t { #if defined(_WIN32) struct open_file_data final { - void *directory_buffer{}; + PVOID directory_buffer{nullptr}; }; #else using open_file_data = int; diff --git a/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp b/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp index 38c0a490..4556842a 100644 --- a/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp +++ b/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp @@ -273,7 +273,7 @@ VOID winfsp_drive::Close(PVOID /*file_node*/, PVOID file_desc) { auto handle = static_cast(reinterpret_cast(file_desc)); if (handle != 0U) { - PVOID directory_buffer = nullptr; + PVOID directory_buffer{nullptr}; std::shared_ptr file; if (fm_->get_open_file(handle, false, file)) { @@ -286,6 +286,7 @@ VOID winfsp_drive::Close(PVOID /*file_node*/, PVOID file_desc) { FspFileSystemDeleteDirectoryBuffer(&directory_buffer); } } + RAISE_WINFSP_EVENT(function_name, api_path, 0); } diff --git a/repertory/librepertory/src/file_manager/file_manager_open_file_base.cpp b/repertory/librepertory/src/file_manager/file_manager_open_file_base.cpp index 7ee9adc8..dfc6af1e 100644 --- a/repertory/librepertory/src/file_manager/file_manager_open_file_base.cpp +++ b/repertory/librepertory/src/file_manager/file_manager_open_file_base.cpp @@ -164,14 +164,26 @@ auto file_manager::open_file_base::get_handles() const return ret; } -auto file_manager::open_file_base::get_open_data() const - -> std::map { +auto file_manager::open_file_base::get_open_data() + -> std::map & { recur_mutex_lock file_lock(file_mtx_); return open_data_; } +auto file_manager::open_file_base::get_open_data() const + -> const std::map & { + recur_mutex_lock file_lock(file_mtx_); + return open_data_; +} + +auto file_manager::open_file_base::get_open_data(std::uint64_t handle) + -> open_file_data & { + recur_mutex_lock file_lock(file_mtx_); + return open_data_.at(handle); +} + auto file_manager::open_file_base::get_open_data(std::uint64_t handle) const - -> open_file_data { + -> const open_file_data & { recur_mutex_lock file_lock(file_mtx_); return open_data_.at(handle); } diff --git a/repertory/repertory_test/include/mocks/mock_open_file.hpp b/repertory/repertory_test/include/mocks/mock_open_file.hpp index e56786a4..7eeed1dd 100644 --- a/repertory/repertory_test/include/mocks/mock_open_file.hpp +++ b/repertory/repertory_test/include/mocks/mock_open_file.hpp @@ -37,7 +37,10 @@ public: MOCK_METHOD(filesystem_item, get_filesystem_item, (), (const, override)); - MOCK_METHOD(open_file_data, get_open_data, (std::uint64_t handle), + MOCK_METHOD(open_file_data &, get_open_data, (std::uint64_t handle), + (override)); + + MOCK_METHOD(const open_file_data &, get_open_data, (std::uint64_t handle), (const, override)); MOCK_METHOD(std::size_t, get_open_file_count, (), (const, override)); @@ -82,8 +85,11 @@ public: MOCK_METHOD(std::vector, get_handles, (), (const, override)); - MOCK_METHOD((std::map), get_open_data, (), - (const, override)); + MOCK_METHOD((std::map &), get_open_data, (), + (override)); + + MOCK_METHOD((const std::map &), get_open_data, + (), (const, override)); MOCK_METHOD(bool, is_complete, (), (const, override));