X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodmanager_dynamic.cpp;h=184013a4e0db3777957a85c9a636fe3fb6fbe5e5;hb=7492344e64491cea6bbb5c9354dceb804bb908ac;hp=7789c90bf8764294438c12c4f608b4cd4bbd6d44;hpb=8a64bd3a0ac72855b681b00f3a9a08cebee755ce;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modmanager_dynamic.cpp b/src/modmanager_dynamic.cpp index 7789c90bf..184013a4e 100644 --- a/src/modmanager_dynamic.cpp +++ b/src/modmanager_dynamic.cpp @@ -18,10 +18,6 @@ #include "inspircd.h" -#include "xline.h" -#include "socket.h" -#include "socketengine.h" -#include "command_parse.h" #include "exitcodes.h" #include @@ -39,7 +35,7 @@ bool ModuleManager::Load(const std::string& filename, bool defer) const std::string moduleFile = ServerInstance->Config->Paths.PrependModule(filename); - if (!ServerConfig::FileExists(moduleFile.c_str())) + if (!FileSystem::FileExists(moduleFile)) { LastModuleError = "Module file could not be found: " + filename; ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError); @@ -55,10 +51,14 @@ bool ModuleManager::Load(const std::string& filename, bool defer) Module* newmod = NULL; DLLManager* newhandle = new DLLManager(moduleFile.c_str()); + ServiceList newservices; + if (!defer) + this->NewServices = &newservices; try { newmod = newhandle->CallInit(); + this->NewServices = NULL; if (newmod) { @@ -77,6 +77,7 @@ bool ModuleManager::Load(const std::string& filename, bool defer) ConfigStatus confstatus; AttachAll(newmod); + AddServices(newservices); newmod->init(); newmod->ReadConfig(confstatus); @@ -95,6 +96,8 @@ bool ModuleManager::Load(const std::string& filename, bool defer) } catch (CoreException& modexcept) { + this->NewServices = NULL; + // failure in module constructor if (newmod) { @@ -118,7 +121,7 @@ bool ModuleManager::Load(const std::string& filename, bool defer) } /* We must load the modules AFTER initializing the socket engine, now */ -void ModuleManager::LoadCoreModules() +void ModuleManager::LoadCoreModules(std::map& servicemap) { std::cout << std::endl << "Loading core commands"; fflush(stdout); @@ -129,11 +132,13 @@ void ModuleManager::LoadCoreModules() dirent* entry = NULL; while (0 != (entry = readdir(library))) { - if (InspIRCd::Match(entry->d_name, "cmd_*.so", ascii_case_insensitive_map)) + if (InspIRCd::Match(entry->d_name, "core_*.so", ascii_case_insensitive_map)) { std::cout << "."; fflush(stdout); + this->NewServices = &servicemap[entry->d_name]; + if (!Load(entry->d_name, true)) { ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, this->LastError());