X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodmanager_dynamic.cpp;h=9e940cc3253a615c550b223b5cefc576426884a5;hb=7770cd985405c7630e9149fc08c314ec824a9c75;hp=7789c90bf8764294438c12c4f608b4cd4bbd6d44;hpb=8a64bd3a0ac72855b681b00f3a9a08cebee755ce;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modmanager_dynamic.cpp b/src/modmanager_dynamic.cpp index 7789c90bf..9e940cc32 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 @@ -29,17 +25,21 @@ #include #endif -#ifndef PURE_STATIC +#ifndef INSPIRCD_STATIC -bool ModuleManager::Load(const std::string& filename, bool defer) +bool ModuleManager::Load(const std::string& modname, bool defer) { /* Don't allow people to specify paths for modules, it doesn't work as expected */ - if (filename.find('/') != std::string::npos) + if (modname.find('/') != std::string::npos) + { + LastModuleError = "You can't load modules with a path: " + modname; return false; + } + const std::string filename = ExpandModName(modname); 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 +55,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 +81,7 @@ bool ModuleManager::Load(const std::string& filename, bool defer) ConfigStatus confstatus; AttachAll(newmod); + AddServices(newservices); newmod->init(); newmod->ReadConfig(confstatus); @@ -95,6 +100,8 @@ bool ModuleManager::Load(const std::string& filename, bool defer) } catch (CoreException& modexcept) { + this->NewServices = NULL; + // failure in module constructor if (newmod) { @@ -118,7 +125,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 +136,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());