aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/plugins/ds/ds-provider.cpp25
-rw-r--r--backends/plugins/elf-provider.h2
2 files changed, 24 insertions, 3 deletions
diff --git a/backends/plugins/ds/ds-provider.cpp b/backends/plugins/ds/ds-provider.cpp
index e4ffb7bd43..999781754b 100644
--- a/backends/plugins/ds/ds-provider.cpp
+++ b/backends/plugins/ds/ds-provider.cpp
@@ -45,11 +45,32 @@ public:
unloadPlugin();
}
+ bool loadPlugin();
};
-/*bool DSPlugin::loadPlugin() {
+bool DSPlugin::loadPlugin() {
+ assert(!_dlHandle);
+ DLObject *obj = new DLObject(NULL);
+ if (obj->open(_filename.c_str())) {
+ _dlHandle = obj;
+ } else {
+ delete obj;
+ _dlHandle = NULL;
+ }
-};*/
+ if (!_dlHandle) {
+ warning("Failed loading plugin '%s'", _filename.c_str());
+ return false;
+ }
+
+ bool ret = DynamicPlugin::loadPlugin();
+
+ if (ret && _dlHandle) {
+ _dlHandle->discard_symtab();
+ }
+
+ return ret;
+};
Plugin* DSPluginProvider::createPlugin(const Common::FSNode &node) const {
return new DSPlugin(node.getPath());
diff --git a/backends/plugins/elf-provider.h b/backends/plugins/elf-provider.h
index 2e659df80c..eb0ea5d51d 100644
--- a/backends/plugins/elf-provider.h
+++ b/backends/plugins/elf-provider.h
@@ -53,7 +53,7 @@ public:
unloadPlugin();
}
- bool loadPlugin();
+ virtual bool loadPlugin();
virtual void unloadPlugin();
};