X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/52f80d6ec77e44660f353e19c71e7994df59496d..38f134e6a96c08fdd7d4ed07ca3550e8434d56e9:/projects/stargazer/store_loader.cpp?ds=sidebyside diff --git a/projects/stargazer/store_loader.cpp b/projects/stargazer/store_loader.cpp index c54bdb36..91646853 100644 --- a/projects/stargazer/store_loader.cpp +++ b/projects/stargazer/store_loader.cpp @@ -18,16 +18,6 @@ * Author : Maxim Mamontov */ -/* - $Revision: 1.6 $ - $Date: 2010/03/04 12:24:19 $ - $Author: faust $ - */ - -/* - * An implementation of RAII store plugin loader - */ - #include #include "stg/common.h" @@ -35,96 +25,96 @@ #include "store_loader.h" #include "settings_impl.h" -STORE_LOADER::STORE_LOADER(const SETTINGS_IMPL & settings) +using STG::StoreLoader; + +StoreLoader::StoreLoader(const SettingsImpl& settings) noexcept : isLoaded(false), handle(NULL), plugin(NULL), - errorStr(), storeSettings(settings.GetStoreModuleSettings()), pluginFileName(settings.GetModulesPath() + "/mod_" + storeSettings.moduleName + ".so") { } -STORE_LOADER::~STORE_LOADER() +StoreLoader::~StoreLoader() { -Unload(); + unload(); } -bool STORE_LOADER::Load() +bool StoreLoader::load() noexcept { -if (isLoaded) + if (isLoaded) { - errorStr = "Store plugin '" + pluginFileName + "' was already loaded!"; - printfd(__FILE__, "STORE_LOADER::Load() - %s\n", errorStr.c_str()); - return false; + errorStr = "Store plugin '" + pluginFileName + "' was already loaded!"; + printfd(__FILE__, "StoreLoader::load() - %s\n", errorStr.c_str()); + return false; } -if (pluginFileName.empty()) + if (pluginFileName.empty()) { - errorStr = "Empty store plugin filename"; - printfd(__FILE__, "STORE_LOADER::Load() - %s\n", errorStr.c_str()); - return true; + errorStr = "Empty store plugin filename"; + printfd(__FILE__, "StoreLoader::load() - %s\n", errorStr.c_str()); + return true; } -handle = dlopen(pluginFileName.c_str(), RTLD_NOW); + handle = dlopen(pluginFileName.c_str(), RTLD_NOW); -if (!handle) + if (!handle) { - errorStr = "Error loading plugin '" - + pluginFileName + "': '" + dlerror() + "'"; - printfd(__FILE__, "STORE_LOADER::Load() - %s\n", errorStr.c_str()); - return true; + errorStr = "Error loading plugin '" + + pluginFileName + "': '" + dlerror() + "'"; + printfd(__FILE__, "StoreLoader::Load() - %s\n", errorStr.c_str()); + return true; } -isLoaded = true; + isLoaded = true; -STORE * (*GetStore)(); -GetStore = (STORE * (*)())dlsym(handle, "GetStore"); -if (!GetStore) + using Getter = Store* (*)(); + auto GetStore = reinterpret_cast(dlsym(handle, "GetStore")); + if (!GetStore) { - errorStr = std::string("GetStore() not found! ") + dlerror(); - printfd(__FILE__, "STORE_LOADER::Load() - %s\n", errorStr.c_str()); - return true; + errorStr = std::string("GetStore() not found! ") + dlerror(); + printfd(__FILE__, "StoreLoader::load() - %s\n", errorStr.c_str()); + return true; } -plugin = GetStore(); + plugin = GetStore(); -if (!plugin) + if (!plugin) { - errorStr = "Plugin was not created!"; - printfd(__FILE__, "STORE_LOADER::Load() - %s\n"); - return true; + errorStr = "Plugin was not created!"; + printfd(__FILE__, "StoreLoader::Load() - %s\n"); + return true; } -plugin->SetSettings(storeSettings); -if (plugin->ParseSettings()) + plugin->SetSettings(storeSettings); + if (plugin->ParseSettings()) { - errorStr = plugin->GetStrError(); - printfd(__FILE__, "STORE_LOADER::Load() - Failed to parse settings. Plugin reports: '%s'\n", errorStr.c_str()); - return true; + errorStr = plugin->GetStrError(); + printfd(__FILE__, "StoreLoader::Load() - Failed to parse settings. Plugin reports: '%s'\n", errorStr.c_str()); + return true; } -return false; + return false; } -bool STORE_LOADER::Unload() +bool StoreLoader::unload() noexcept { -printfd(__FILE__, "STORE_LOADER::Unload()\n"); -if (!isLoaded) - { - return true; - } + if (!isLoaded) + return true; + + delete plugin; -if (dlclose(handle)) + if (dlclose(handle)) { - errorStr = "Failed to unload plugin '"; - errorStr += pluginFileName + "': "; - errorStr += dlerror(); - printfd(__FILE__, "STORE_LOADER::Unload() - %s\n", errorStr.c_str()); - return true; + errorStr = "Failed to unload plugin '"; + errorStr += pluginFileName + "': "; + errorStr += dlerror(); + printfd(__FILE__, "StoreLoader::Unload() - %s\n", errorStr.c_str()); + return true; } -isLoaded = false; + isLoaded = false; -return false; + return false; }