X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodulemanager.cpp;h=cac1263581ce2c8e4d03c04e13512ff71beac67c;hb=70f4f0225cf4357b6fa3c57cd63b49da79b9eeef;hp=eb40c59718dffa703cf0c3b089dea35fe3d73504;hpb=77730fd5f09f8fc193205654c8bba84d34365670;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp index eb40c5971..cac126358 100644 --- a/src/modulemanager.cpp +++ b/src/modulemanager.cpp @@ -1,6 +1,12 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2013, 2015, 2019-2020 Sadie Powell + * Copyright (C) 2013 Adam + * Copyright (C) 2012-2013, 2015 Attila Molnar + * Copyright (C) 2012 Robby + * Copyright (C) 2012 ChrisTX + * Copyright (C) 2010 Craig Edwards * Copyright (C) 2009-2010 Daniel De Graaf * * This file is part of InspIRCd. InspIRCd is free software: you can @@ -21,10 +27,6 @@ #include "exitcodes.h" #include -#ifndef _WIN32 -#include -#endif - bool ModuleManager::Load(const std::string& modname, bool defer) { /* Don't allow people to specify paths for modules, it doesn't work as expected */ @@ -66,15 +68,14 @@ bool ModuleManager::Load(const std::string& modname, bool defer) { newmod->ModuleSourceFile = filename; newmod->ModuleDLLManager = newhandle; - newmod->dying = false; Modules[filename] = newmod; - std::string version = newhandle->GetVersion(); - if (version.empty()) - version.assign("unknown"); + const char* version = newhandle->GetVersion(); + if (!version) + version = "unknown"; if (defer) { ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, "New module introduced: %s (Module version %s)", - filename.c_str(), version.c_str()); + filename.c_str(), version); } else { @@ -87,7 +88,7 @@ bool ModuleManager::Load(const std::string& modname, bool defer) Version v = newmod->GetVersion(); ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, "New module introduced: %s (Module version %s)%s", - filename.c_str(), version.c_str(), (!(v.Flags & VF_VENDOR) ? " [3rd Party]" : " [Vendor]")); + filename.c_str(), version, (!(v.Flags & VF_VENDOR) ? " [3rd Party]" : " [Vendor]")); } } else @@ -127,31 +128,29 @@ bool ModuleManager::Load(const std::string& modname, bool defer) /* We must load the modules AFTER initializing the socket engine, now */ void ModuleManager::LoadCoreModules(std::map& servicemap) { - std::cout << std::endl << "Loading core commands"; - fflush(stdout); + std::cout << "Loading core modules " << std::flush; - DIR* library = opendir(ServerInstance->Config->Paths.Module.c_str()); - if (library) + std::vector files; + if (!FileSystem::GetFileList(ServerInstance->Config->Paths.Module, files, "core_*.so")) { - dirent* entry = NULL; - while (0 != (entry = readdir(library))) - { - if (InspIRCd::Match(entry->d_name, "core_*.so", ascii_case_insensitive_map)) - { - std::cout << "."; - fflush(stdout); + std::cout << "failed!" << std::endl; + ServerInstance->Exit(EXIT_STATUS_MODULE); + } - this->NewServices = &servicemap[entry->d_name]; + for (std::vector::const_iterator iter = files.begin(); iter != files.end(); ++iter) + { + std::cout << "." << std::flush; - if (!Load(entry->d_name, true)) - { - ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, this->LastError()); - std::cout << std::endl << "[" << con_red << "*" << con_reset << "] " << this->LastError() << std::endl << std::endl; - ServerInstance->Exit(EXIT_STATUS_MODULE); - } - } + const std::string& name = *iter; + this->NewServices = &servicemap[name]; + + if (!Load(name, true)) + { + ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, this->LastError()); + std::cout << std::endl << "[" << con_red << "*" << con_reset << "] " << this->LastError() << std::endl << std::endl; + ServerInstance->Exit(EXIT_STATUS_MODULE); } - closedir(library); - std::cout << std::endl; } + + std::cout << std::endl; }