#include #include "plugin_manager.h" #include "plugin.h" #include "debug.h" int load_plugin(const char *path) { struct plugin_info *info; void *handle; int ret = -1; handle = dlopen(path, RTLD_NOW); if (!handle) { pr_err("Failed to load plugin %s: %s\n", path, dlerror()); return -1; } info = dlsym(handle, "plugin_info"); if (!info) { pr_err("Plugin %s does not contain plugin info\n", path); goto out; } if (!info->init) { pr_err("Plugin info structure has NULL .init callback\n"); goto out; } ret = info->init(); pr_info("Loading plugin %s %s\n", path, ret ? "failed" : "succeeded"); out: if (ret) dlclose(handle); return ret; }