summaryrefslogtreecommitdiff
path: root/libs/ardour/control_protocol_manager.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-07-11 13:58:48 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-07-11 13:58:48 -0400
commit83ed3d7dcc121bb7947d7532c869ccf3e0510b86 (patch)
tree66adb4caa8b58b90d638b1086c53b0ac785e8534 /libs/ardour/control_protocol_manager.cc
parent058ebf98b928f735ac2dbd5026a4dcf3fba3e67b (diff)
Use glibmm for modules instead of dlfch.h
Diffstat (limited to 'libs/ardour/control_protocol_manager.cc')
-rw-r--r--libs/ardour/control_protocol_manager.cc36
1 files changed, 21 insertions, 15 deletions
diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc
index 2e65a8d6f8..3ccc1f134b 100644
--- a/libs/ardour/control_protocol_manager.cc
+++ b/libs/ardour/control_protocol_manager.cc
@@ -17,7 +17,7 @@
*/
-#include <dlfcn.h>
+#include <glibmm/module.h>
#include <glibmm/fileutils.h>
@@ -29,8 +29,14 @@
#include "ardour/debug.h"
#include "ardour/control_protocol_manager.h"
+
+#ifdef SearchPath
+#undef SearchPath
+#endif
+
#include "ardour/control_protocol_search_path.h"
+
using namespace ARDOUR;
using namespace std;
using namespace PBD;
@@ -179,7 +185,7 @@ ControlProtocolManager::teardown (ControlProtocolInfo& cpi)
cpi.protocol = 0;
delete cpi.state;
cpi.state = 0;
- dlclose (cpi.descriptor->module);
+ delete (Glib::Module*)cpi.descriptor->module;
ProtocolStatusChange (&cpi);
@@ -264,7 +270,7 @@ ControlProtocolManager::control_protocol_discover (string path)
string_compose(_("Control surface protocol discovered: \"%1\"\n"), cpi->name));
}
- dlclose (descriptor->module);
+ delete (Glib::Module*)descriptor->module;
}
return 0;
@@ -273,31 +279,31 @@ ControlProtocolManager::control_protocol_discover (string path)
ControlProtocolDescriptor*
ControlProtocolManager::get_descriptor (string path)
{
- void *module;
+ Glib::Module* module = new Glib::Module(path);
ControlProtocolDescriptor *descriptor = 0;
ControlProtocolDescriptor* (*dfunc)(void);
- const char *errstr;
+ void* func = 0;
- if ((module = dlopen (path.c_str(), RTLD_NOW)) == 0) {
- error << string_compose(_("ControlProtocolManager: cannot load module \"%1\" (%2)"), path, dlerror()) << endmsg;
+ if (!(*module)) {
+ error << string_compose(_("ControlProtocolManager: cannot load module \"%1\" (%2)"), path, Glib::Module::get_last_error()) << endmsg;
+ delete module;
return 0;
}
-
- dfunc = (ControlProtocolDescriptor* (*)(void)) dlsym (module, "protocol_descriptor");
-
- if ((errstr = dlerror()) != 0) {
+ if (!module->get_symbol("protocol_descriptor", func)) {
error << string_compose(_("ControlProtocolManager: module \"%1\" has no descriptor function."), path) << endmsg;
- error << errstr << endmsg;
- dlclose (module);
+ error << Glib::Module::get_last_error() << endmsg;
+ delete module;
return 0;
}
+ dfunc = (ControlProtocolDescriptor* (*)(void))func;
descriptor = dfunc();
+
if (descriptor) {
- descriptor->module = module;
+ descriptor->module = (void*)module;
} else {
- dlclose (module);
+ delete module;
}
return descriptor;