summaryrefslogtreecommitdiff
path: root/src/modulemanager.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2014-05-27 12:53:20 -0400
committerAdam <Adam@anope.org>2014-05-27 12:55:03 -0400
commite8ad509aa5b4bed4f61f32fd1ac7bfeb49685be5 (patch)
treebe2210f4cf08d573f0adab9230156ab56697a5cd /src/modulemanager.cpp
parent37b3ed8ef39bb0e3e4f730f354a646b4cdc36e8e (diff)
Fix dlerror() on Windows and do not abort if err is not set
Diffstat (limited to 'src/modulemanager.cpp')
-rw-r--r--src/modulemanager.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp
index 07ac46ee1..2832a562a 100644
--- a/src/modulemanager.cpp
+++ b/src/modulemanager.cpp
@@ -159,25 +159,25 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
dlerror();
void *handle = dlopen(pbuf.c_str(), RTLD_NOW);
const char *err = dlerror();
- if (!handle && err && *err)
+ if (!handle)
{
- Log() << err;
+ if (err && *err)
+ Log() << err;
return MOD_ERR_NOLOAD;
}
dlerror();
Module *(*func)(const Anope::string &, const Anope::string &) = function_cast<Module *(*)(const Anope::string &, const Anope::string &)>(dlsym(handle, "AnopeInit"));
err = dlerror();
- if (!func && err && *err)
+ if (!func)
{
Log() << "No init function found, not an Anope module";
+ if (err && *err)
+ Log(LOG_DEBUG) << err;
dlclose(handle);
return MOD_ERR_NOLOAD;
}
-
- if (!func)
- throw CoreException("Couldn't find constructor, yet moderror wasn't set?");
-
+
/* Create module. */
Anope::string nick;
if (u)
@@ -192,6 +192,8 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
catch (const ModuleException &ex)
{
Log() << "Error while loading " << modname << ": " << ex.GetReason();
+ /*if (dlclose(handle))
+ Log() << dlerror();*/
return MOD_ERR_EXCEPTION;
}