]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules.cpp
Remove UserManager::GarbageCollect()
[user/henk/code/inspircd.git] / src / modules.cpp
index a7acb24d08b3ca90c3ae8aab3ffd73633daf1cd0..9e653a4aba1460560f67a79dac1f2a54fb8a483c 100644 (file)
@@ -337,12 +337,6 @@ bool ModuleManager::CanUnload(Module* mod)
                ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError);
                return false;
        }
-       if (mod->GetVersion().Flags & VF_STATIC)
-       {
-               LastModuleError = "Module " + mod->ModuleSourceFile + " not unloadable (marked static)";
-               ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError);
-               return false;
-       }
 
        mod->dying = true;
        return true;
@@ -505,7 +499,7 @@ void ModuleManager::LoadAll()
        {
                ConfigTag* tag = i->second;
                std::string name = tag->getString("name");
-               this->NewServices = &servicemap[name];
+               this->NewServices = &servicemap[ExpandModName(name)];
                std::cout << "[" << con_green << "*" << con_reset << "] Loading module:\t" << con_green << name << con_reset << std::endl;
 
                if (!this->Load(name, true))
@@ -642,6 +636,16 @@ ServiceProvider* ModuleManager::FindService(ServiceType type, const std::string&
        }
 }
 
+std::string ModuleManager::ExpandModName(const std::string& modname)
+{
+       // Transform "callerid" -> "m_callerid.so" unless it already has a ".so" extension,
+       // so coremods in the "core_*.so" form aren't changed
+       std::string ret = modname;
+       if ((modname.length() < 3) || (modname.compare(modname.size() - 3, 3, ".so")))
+               ret.insert(0, "m_").append(".so");
+       return ret;
+}
+
 dynamic_reference_base::dynamic_reference_base(Module* Creator, const std::string& Name)
        : name(Name), hook(NULL), value(NULL), creator(Creator)
 {
@@ -691,7 +695,7 @@ void dynamic_reference_base::resolve()
 
 Module* ModuleManager::Find(const std::string &name)
 {
-       std::map<std::string, Module*>::iterator modfind = Modules.find(name);
+       std::map<std::string, Module*>::const_iterator modfind = Modules.find(ExpandModName(name));
 
        if (modfind == Modules.end())
                return NULL;