6 #include "plugin_manager.h"
10 static char *exec_path;
12 int init_plugin_manager(const char *_exec_path)
14 char *str = strdup(_exec_path);
15 exec_path = strdup(dirname(str));
21 int load_plugin(const char *path)
23 struct plugin_info *info;
27 handle = dlopen(path, RTLD_NOW);
29 pr_err("Failed to load plugin %s: %s\n", path, dlerror());
33 info = dlsym(handle, "plugin_info");
35 pr_err("Plugin %s does not contain plugin info\n", path);
40 pr_err("Plugin info structure has NULL .init callback\n");
45 pr_info("Loading plugin %s %s\n", path,
46 ret ? "failed" : "succeeded");
56 * Try to load a parser plugin with file name matching some of the
57 * following candidates (%s being the requested name):
61 * "<exec_path>/%s_parser.so"
63 int load_parser_plugin(const char *name)
65 char str[256], parser[] = "_parser.so";
68 strncpy(str, name, sizeof(str));
69 strncat(str, parser, sizeof(str) - 1);
70 ret = load_plugin(str);
74 strncpy(str, "./", sizeof(str));
75 strncat(str, name, sizeof(str) - 1);
76 strncat(str, parser, sizeof(str) - 1);
77 ret = load_plugin(str);
84 strncpy(str, exec_path, sizeof(str));
85 strncat(str, "/", sizeof(str) - 1);
86 strncat(str, name, sizeof(str) - 1);
87 strncat(str, parser, sizeof(str) - 1);
88 return load_plugin(str);