mana: fix plugin loading

This commit is contained in:
Florian Lüke 2025-01-02 22:07:00 +01:00
parent a4761647cd
commit 3bc9819c14

View file

@ -367,19 +367,26 @@ PluginWrapper load_mana_plugin(const std::string &filename,
PluginWrapper result; PluginWrapper result;
result.pluginHandle = boost::dll::shared_library(filename, boost::dll::load_mode::rtld_global); result.pluginHandle = boost::dll::shared_library(filename, boost::dll::load_mode::rtld_global);
if (auto entryPoint = result.pluginHandle.get<mana_sink_plugin_t()>("mana_get_sink_plugin")) try
{ {
std::vector<const char *> argv; if (auto entryPoint = result.pluginHandle.get<mana_sink_plugin_t()>("mana_get_sink_plugin"))
for (const auto &arg: pluginArgs) {
argv.push_back(arg.data()); std::vector<const char *> argv;
result.destSink = std::make_unique<mana::ManaCSink>(entryPoint(), argv.size(), argv.data()); for (const auto &arg: pluginArgs)
argv.push_back(arg.data());
result.destSink =
std::make_unique<mana::ManaCSink>(entryPoint(), argv.size(), argv.data());
}
} }
else if (auto entryPoint = result.pluginHandle.get<mana::IManaPlugin *()>("mana_get_plugin")) catch (const std::exception &e)
{ {
result.manaCppPlugin = std::unique_ptr<mana::IManaPlugin>(entryPoint()); if (auto entryPoint = result.pluginHandle.get<mana::IManaPlugin *()>("mana_get_plugin"))
if (!result.manaCppPlugin) {
throw std::runtime_error("plugin {}: mana_get_plugin() returned nullptr"); result.manaCppPlugin = std::unique_ptr<mana::IManaPlugin>(entryPoint());
result.destSink = result.manaCppPlugin->makeSink(); if (!result.manaCppPlugin)
throw std::runtime_error("plugin {}: mana_get_plugin() returned nullptr");
result.destSink = result.manaCppPlugin->makeSink();
}
} }
return result; return result;