diff --git a/src/core/plugin.c b/src/core/plugin.c
index 99f07cb03e2a10914f56fab553a4e56aad54eed6..c8e8e9e0db06a7799275608b4724eb8929d5b89f 100644 (file)
--- a/src/core/plugin.c
+++ b/src/core/plugin.c
#include "core/plugin.h"
#include "utils/error.h"
#include "utils/llist.h"
-#include "utils/string.h"
#include "utils/time.h"
#include <assert.h>
int
sdb_plugin_load(const char *name)
{
+ char real_name[strlen(name) > 0 ? strlen(name) : 1];
+ const char *name_ptr;
+ char *tmp;
+
char filename[1024];
lt_dlhandle lh;
int status;
+ if ((! name) || (! *name))
+ return -1;
+
+ real_name[0] = '\0';
+ name_ptr = name;
+
+ while ((tmp = strstr(name_ptr, "::"))) {
+ strncat(real_name, name_ptr, (size_t)(tmp - name_ptr));
+ strcat(real_name, "/");
+ name_ptr = tmp + strlen("::");
+ }
+ strcat(real_name, name_ptr);
+
snprintf(filename, sizeof(filename), "%s/%s.so",
- PKGLIBDIR, name);
+ PKGLIBDIR, real_name);
filename[sizeof(filename) - 1] = '\0';
if (access(filename, R_OK)) {
char errbuf[1024];
- sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s\n",
- name, sdb_strerror(errno, errbuf, sizeof(errbuf)));
+ sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s' (%s): %s\n",
+ name, filename, sdb_strerror(errno, errbuf, sizeof(errbuf)));
return -1;
}