diff options
author | Adam <Adam@anope.org> | 2014-05-27 12:53:20 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-05-27 12:55:03 -0400 |
commit | e8ad509aa5b4bed4f61f32fd1ac7bfeb49685be5 (patch) | |
tree | be2210f4cf08d573f0adab9230156ab56697a5cd /src | |
parent | 37b3ed8ef39bb0e3e4f730f354a646b4cdc36e8e (diff) |
Fix dlerror() on Windows and do not abort if err is not set
Diffstat (limited to 'src')
-rw-r--r-- | src/modulemanager.cpp | 16 | ||||
-rw-r--r-- | src/win32/dl/dl.cpp | 3 |
2 files changed, 11 insertions, 8 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; } diff --git a/src/win32/dl/dl.cpp b/src/win32/dl/dl.cpp index b7ffddaa3..5b19d7441 100644 --- a/src/win32/dl/dl.cpp +++ b/src/win32/dl/dl.cpp @@ -15,7 +15,8 @@ void *dlopen(const char *filename, int) char *dlerror(void) { - static Anope::string err = Anope::LastError(); + static Anope::string err; + err = Anope::LastError(); SetLastError(0); return err.empty() ? NULL : const_cast<char *>(err.c_str()); } |