From 37566202133915d76179e0fd0c7fad654fc4dda0 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 27 Jul 2013 21:33:37 +0200 Subject: Encapsulate protocol_t --- mmss/protocol.cpp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'mmss/protocol.cpp') diff --git a/mmss/protocol.cpp b/mmss/protocol.cpp index 246b136..5688525 100644 --- a/mmss/protocol.cpp +++ b/mmss/protocol.cpp @@ -24,43 +24,36 @@ */ +#include "protocol.hpp" #include "mmss.hpp" #include -#include namespace MMSS { -class dlcloser { -private: - void *handle; - -public: - dlcloser(void *handle0) : handle(handle0) {} - void operator()(const protocol_t *ptr) const { - ::dlclose(handle); - } -}; +protocol_t::~protocol_t() { + ::dlclose(handle); +} -std::shared_ptr load_protocol(const char *module) { - void *handle = ::dlopen(module, RTLD_NOW); +std::shared_ptr protocol_t::load(context_t *mmss, const std::string &module) { + void *handle = ::dlopen(module.c_str(), RTLD_NOW); if (!handle) { - std::fprintf(stderr, "unable to load protocol from `%s': %s\n", module, dlerror()); + mmss->logf(LOG_ERR, "unable to load protocol from `%s': %s", module.c_str(), dlerror()); return std::shared_ptr(); } ::dlerror(); - const protocol_t *proto = reinterpret_cast(::dlsym(handle, "mmss_protocol_info")); + const mmss_protocol_t *proto = reinterpret_cast(::dlsym(handle, "mmss_protocol_info")); if (!proto) { - std::fprintf(stderr, "unable to load protocol from `%s': %s\n", module, dlerror()); + mmss->logf(LOG_ERR, "unable to load protocol from `%s': %s", module.c_str(), dlerror()); ::dlclose(handle); return std::shared_ptr(); } - std::fprintf(stderr, "loaded protocol `%s' version %s\n", proto->get_name(), proto->get_version()); + mmss->logf(LOG_INFO, "loaded protocol `%s' version %s", proto->get_name(), proto->get_version()); - return std::shared_ptr(proto, dlcloser(handle)); + return std::shared_ptr(new protocol_t(handle, proto)); } } -- cgit v1.2.3