From 1f146d20a84918a0aa436a3b5ab4f38d07654e57 Mon Sep 17 00:00:00 2001 From: Youngjae Shin Date: Tue, 20 Sep 2022 16:05:56 +0900 Subject: [PATCH] revise plugin create/delete symbols --- include/ModesPlugin.h | 12 +++++++++++- plugin/TestPlugin.cpp | 4 ++-- supervisor/PluginMapper.cpp | 4 ++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/include/ModesPlugin.h b/include/ModesPlugin.h index 846a199..7a69ded 100644 --- a/include/ModesPlugin.h +++ b/include/ModesPlugin.h @@ -20,6 +20,11 @@ #include +#define MODES_PLUGIN_CREATE objectCreate +#define MODES_PLUGIN_DELETE objectDelete +#define TO_STR(s) #s +#define DEFINE_TO_STR(s) TO_STR(s) + namespace ModeSupervisorNamespace { class Plugin { @@ -27,8 +32,10 @@ class Plugin { Plugin() = default; virtual ~Plugin() = default; - void setName(const std::string &pluginName) { name = pluginName; } + static constexpr const char *const NEW_PLUGIN = DEFINE_TO_STR(MODES_PLUGIN_CREATE); + static constexpr const char *const DELETE_PLUGIN = DEFINE_TO_STR(MODES_PLUGIN_DELETE); + void setName(const std::string &pluginName) { name = pluginName; } std::string getName() { return name; } // It should returns dynamic allocated instance of PluginAction @@ -48,3 +55,6 @@ class Plugin { typedef Plugin *(*createFunc)(void); typedef void (*destroyFunc)(Plugin *); } // namespace ModeSupervisorNamespace + +#undef TO_STR +#undef DEFINE_TO_STR diff --git a/plugin/TestPlugin.cpp b/plugin/TestPlugin.cpp index 7e16afd..fba383b 100644 --- a/plugin/TestPlugin.cpp +++ b/plugin/TestPlugin.cpp @@ -31,12 +31,12 @@ class TestPlugin : public Plugin { void deleteAction(PluginAction *piAction) override; }; -extern "C" API Plugin *objectCreate(void) +extern "C" API Plugin *MODES_PLUGIN_CREATE(void) { return new TestPlugin(); } -extern "C" API void objectDelete(Plugin *plugin) +extern "C" API void MODES_PLUGIN_DELETE(Plugin *plugin) { delete plugin; } diff --git a/supervisor/PluginMapper.cpp b/supervisor/PluginMapper.cpp index cd38e19..bc07f1c 100644 --- a/supervisor/PluginMapper.cpp +++ b/supervisor/PluginMapper.cpp @@ -75,7 +75,7 @@ PluginMapper::PluginPair PluginMapper::loadClass(const std::string &pluginFile) } /* load the symbols */ - createFunc newPlugin = (createFunc)dlsym(handle, "objectCreate"); + createFunc newPlugin = (createFunc)dlsym(handle, Plugin::NEW_PLUGIN); if (nullptr == newPlugin) { ERR("dlsym(objectCreate) Fail(Plugin[%s] error[%s])", pluginFile.c_str(), dlerror()); dlclose(handle); @@ -101,7 +101,7 @@ int PluginMapper::unloadClass(const PluginPair &pluginPair) RETVM_IF(nullptr == handle, MODES_ERROR_SYSTEM, "No handle(%s)", pluginName.c_str()); - destroyFunc deletePlugin = (destroyFunc)dlsym(handle, "objectDelete"); + destroyFunc deletePlugin = (destroyFunc)dlsym(handle, Plugin::DELETE_PLUGIN); if (nullptr == deletePlugin) { ERR("dlsym(objectDelete) Fail(plugin[%s] error[%s])", pluginName.c_str(), dlerror()); dlclose(handle); -- 2.34.1