summaryrefslogtreecommitdiff
path: root/src/dynamic.cpp
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2003-01-23 19:45:57 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2003-01-23 19:45:57 +0000
commit73b9d0c5cb02f0ea8350de28bc3687e0af70ea0f (patch)
treea5845579b1363762650f0e45c62a13890e1efa43 /src/dynamic.cpp
Initial revision
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@132 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/dynamic.cpp')
-rw-r--r--src/dynamic.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/dynamic.cpp b/src/dynamic.cpp
new file mode 100644
index 000000000..e9cddcbbf
--- /dev/null
+++ b/src/dynamic.cpp
@@ -0,0 +1,70 @@
+#include "globals.h"
+#include <dlfcn.h>
+#include "dynamic.h"
+
+
+
+DLLManager::DLLManager( const char *fname )
+{
+ // Try to open the library now and get any error message.
+
+ h=dlopen( fname, RTLD_NOW );
+ err=dlerror();
+}
+
+DLLManager::~DLLManager()
+{
+ // close the library if it isn't null
+ if( h!=0 )
+ dlclose(h);
+}
+
+
+bool DLLManager::GetSymbol(
+ void **v,
+ const char *sym_name
+ )
+{
+ // try extract a symbol from the library
+ // get any error message is there is any
+
+ if( h!=0 )
+ {
+ *v = dlsym( h, sym_name );
+ err=dlerror();
+ if( err==0 )
+ return true;
+ else
+ return false;
+ }
+ else
+ {
+ return false;
+ }
+
+}
+
+
+DLLFactoryBase::DLLFactoryBase(
+ const char *fname,
+ const char *factory=0
+ ) : DLLManager(fname)
+{
+ // try get the factory function if there is no error yet
+
+ factory_func=0;
+
+ if( LastError()==0 )
+ {
+ GetSymbol( (void **)&factory_func, factory ? factory : "init_module" );
+ }
+
+}
+
+
+DLLFactoryBase::~DLLFactoryBase()
+{
+}
+
+
+