diff --git a/repertory/librepertory/include/platform/unix_platform.hpp b/repertory/librepertory/include/platform/unix_platform.hpp index 95dcecf6..fbb9ceab 100644 --- a/repertory/librepertory/include/platform/unix_platform.hpp +++ b/repertory/librepertory/include/platform/unix_platform.hpp @@ -30,7 +30,7 @@ class i_provider; class lock_data final { public: - explicit lock_data(const provider_type &prov, std::string unique_id); + lock_data(provider_type prov, std::string_view unique_id); lock_data(const lock_data &) = delete; lock_data(lock_data &&) = delete; @@ -42,19 +42,21 @@ public: private: std::string mutex_id_; - int lock_fd_; + +private: + int handle_{}; int lock_status_{EWOULDBLOCK}; private: [[nodiscard]] static auto get_state_directory() -> std::string; - [[nodiscard]] static auto get_lock_data_file() -> std::string; + [[nodiscard]] auto get_lock_data_file() const -> std::string; - [[nodiscard]] auto get_lock_file() -> std::string; + [[nodiscard]] auto get_lock_file() const -> std::string; private: - [[nodiscard]] static auto wait_for_lock(int fd, - std::uint8_t retry_count = 30u) + [[nodiscard]] static auto wait_for_lock(int handle, + std::uint8_t retry_count = 30U) -> int; public: diff --git a/repertory/librepertory/src/platform/unix_platform.cpp b/repertory/librepertory/src/platform/unix_platform.cpp index 5f0cdf6a..09087969 100644 --- a/repertory/librepertory/src/platform/unix_platform.cpp +++ b/repertory/librepertory/src/platform/unix_platform.cpp @@ -23,7 +23,6 @@ #include "platform/platform.hpp" -#include "app_config.hpp" #include "events/event_system.hpp" #include "events/types/filesystem_item_added.hpp" #include "providers/i_provider.hpp" @@ -36,14 +35,14 @@ #include "utils/unix.hpp" namespace repertory { -lock_data::lock_data(const provider_type &prov, std::string unique_id) +lock_data::lock_data(provider_type prov, std::string_view unique_id) : mutex_id_(create_lock_id(prov, unique_id)) { - lock_fd_ = open(get_lock_file().c_str(), O_CREAT | O_RDWR, S_IWUSR | S_IRUSR); + handle_ = open(get_lock_file().c_str(), O_CREAT | O_RDWR, S_IWUSR | S_IRUSR); } lock_data::~lock_data() { release(); } -auto lock_data::get_lock_data_file() -> std::string { +auto lock_data::get_lock_data_file() const -> std::string { auto dir = get_state_directory(); if (not utils::file::directory(dir).create_directory()) { throw startup_exception("failed to create directory|sp|" + dir + "|err|" + @@ -56,7 +55,7 @@ auto lock_data::get_lock_data_file() -> std::string { }); } -auto lock_data::get_lock_file() -> std::string { +auto lock_data::get_lock_file() const -> std::string { auto dir = get_state_directory(); if (not utils::file::directory(dir).create_directory()) { throw startup_exception("failed to create directory|sp|" + dir + "|err|" + @@ -70,19 +69,19 @@ auto lock_data::get_lock_file() -> std::string { } auto lock_data::get_mount_state(json &mount_state) -> bool { - auto fd = + auto handle = open(get_lock_data_file().c_str(), O_CREAT | O_RDWR, S_IWUSR | S_IRUSR); - if (fd == -1) { + if (handle == -1) { return false; } auto ret{false}; - if (wait_for_lock(fd) == 0) { + if (wait_for_lock(handle) == 0) { ret = utils::file::read_json_file(get_lock_data_file(), mount_state); - flock(fd, LOCK_UN); + flock(handle, LOCK_UN); } - close(fd); + close(handle); return ret; } @@ -97,11 +96,11 @@ auto lock_data::get_state_directory() -> std::string { } auto lock_data::grab_lock(std::uint8_t retry_count) -> lock_result { - if (lock_fd_ == -1) { + if (handle_ == -1) { return lock_result::failure; } - lock_status_ = wait_for_lock(lock_fd_, retry_count); + lock_status_ = wait_for_lock(handle_, retry_count); switch (lock_status_) { case 0: return lock_result::success; @@ -113,20 +112,20 @@ auto lock_data::grab_lock(std::uint8_t retry_count) -> lock_result { } void lock_data::release() { - if (lock_fd_ == -1) { + if (handle_ == -1) { return; } if (lock_status_ == 0) { - utils::file::file{get_lock_file()}.delete(); - flock(lock_fd_, LOCK_UN); + [[maybe_unused]] auto success{utils::file::file{get_lock_file()}.remove()}; + flock(handle_, LOCK_UN); } - close(lock_fd_); - lock_fd_ = -1; + close(handle_); + handle_ = -1; } -auto lock_data::set_mount_state(bool active, const std::string &mount_location, +auto lock_data::set_mount_state(bool active, std::string_view mount_location, int pid) -> bool { REPERTORY_USES_FUNCTION_NAME(); @@ -150,7 +149,7 @@ auto lock_data::set_mount_state(bool active, const std::string &mount_location, ((mount_state.find("Location") == mount_state.end()) || (mount_state["Location"].get() != mount_location)))) { if (mount_location.empty() && not active) { - ret = utils::file::file{get_lock_data_file()}.delete(); + ret = utils::file::file{get_lock_data_file()}.remove(); } else { ret = utils::file::write_json_file( get_lock_data_file(), @@ -171,13 +170,13 @@ auto lock_data::set_mount_state(bool active, const std::string &mount_location, return ret; } -auto lock_data::wait_for_lock(int fd, std::uint8_t retry_count) -> int { +auto lock_data::wait_for_lock(int handle, std::uint8_t retry_count) -> int { static constexpr const std::uint32_t max_sleep{100U}; auto lock_status{EWOULDBLOCK}; auto remain{static_cast(retry_count * max_sleep)}; while ((remain > 0) && (lock_status == EWOULDBLOCK)) { - lock_status = flock(fd, LOCK_EX | LOCK_NB); + lock_status = flock(handle, LOCK_EX | LOCK_NB); if (lock_status == -1) { lock_status = errno; if (lock_status == EWOULDBLOCK) { @@ -232,7 +231,7 @@ auto provider_meta_handler(i_provider &provider, bool directory, file.changed_date, file.creation_date, directory, getgid(), file.key, directory ? S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR : S_IFREG | S_IRUSR | S_IWUSR, - file.modified_date, 0u, 0u, file.file_size, file.source_path, getuid(), + file.modified_date, 0U, 0U, file.file_size, file.source_path, getuid(), file.modified_date); auto res = provider.set_item_meta(file.api_path, meta); if (res == api_error::success) {