mirror of
https://github.com/anope/anope.git
synced 2026-06-29 15:56:37 +02:00
Add Module::SetPermanent() and Module::GetPermanent(), used to mark a module as not unloadable.
Used for os_modunload, as unloading it would cause issues. git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1679 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
@@ -13,7 +13,7 @@ Legend:
|
||||
[x] Change MODULE_INIT to return a pointer
|
||||
[x] Remove duplicate module creation.. have loadModule return a pointer rather than creating one
|
||||
[x] Remove buffered loading/unloading, this makes os_modunload perm, but who cares
|
||||
[ ] Mark os_modunload permanent.
|
||||
[x] Mark os_modunload permanent.
|
||||
[x] Remove 'delayed' loading, this is necessary because of before/after connected to ircd (ircd is before, rest after), I'm sure this can be done better.
|
||||
[ ] Remove modules_unload_all fini + hack that goes with it
|
||||
[+] Remove mod_current_* crap (involves passing Module * around a lot)
|
||||
|
||||
@@ -136,6 +136,8 @@ struct ModuleLang_ {
|
||||
*/
|
||||
CoreExport class Module
|
||||
{
|
||||
private:
|
||||
bool permanent;
|
||||
public:
|
||||
/** The module name (e.g. os_modload)
|
||||
*/
|
||||
@@ -177,6 +179,20 @@ CoreExport class Module
|
||||
*/
|
||||
void SetType(MODType type);
|
||||
|
||||
/** Toggles the permanent flag on a module. If a module is permanent,
|
||||
* then it may not be unloaded.
|
||||
*
|
||||
* Naturally, this setting should be used sparingly!
|
||||
*
|
||||
* @param state True if this module should be permanent, false else.
|
||||
*/
|
||||
void SetPermanent(bool state);
|
||||
|
||||
/** Retrieves whether or not a given module is permanent.
|
||||
* @return true if the module is permanent, false else.
|
||||
*/
|
||||
bool GetPermanent();
|
||||
|
||||
/** Set the modules version info.
|
||||
* @param version the version of the module
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,7 @@ class OSModUnLoad : public Module
|
||||
this->SetAuthor("Anope");
|
||||
this->SetVersion("$Id$");
|
||||
this->SetType(CORE);
|
||||
this->SetPermanent(true);
|
||||
|
||||
c = createCommand("MODUNLOAD", do_modunload, is_services_root, -1, -1, -1, -1, OPER_HELP_MODUNLOAD);
|
||||
this->AddCommand(OPERSERV, c, MOD_UNIQUE);
|
||||
|
||||
@@ -31,6 +31,8 @@ Module::Module(const std::string &mname, const std::string &creator)
|
||||
this->type = THIRD;
|
||||
this->handle = NULL;
|
||||
|
||||
this->permanent = false;
|
||||
|
||||
for (int i = 0; i < NUM_LANGS; i++)
|
||||
{
|
||||
this->lang[i].argc = 0;
|
||||
@@ -210,6 +212,16 @@ void Module::SetType(MODType ntype)
|
||||
this->type = ntype;
|
||||
}
|
||||
|
||||
void Module::SetPermanent(bool state)
|
||||
{
|
||||
this->permanent = state;
|
||||
}
|
||||
|
||||
bool Module::GetPermanent()
|
||||
{
|
||||
return this->permanent;
|
||||
}
|
||||
|
||||
void Module::SetVersion(const std::string &nversion)
|
||||
{
|
||||
this->version = nversion;
|
||||
|
||||
@@ -229,7 +229,7 @@ int ModuleManager::LoadModule(const std::string &modname, User * u)
|
||||
return MOD_ERR_OK;
|
||||
}
|
||||
|
||||
int ModuleManager::UnloadModule(Module * m, User * u)
|
||||
int ModuleManager::UnloadModule(Module *m, User *u)
|
||||
{
|
||||
if (!m || !m->handle)
|
||||
{
|
||||
@@ -238,7 +238,7 @@ int ModuleManager::UnloadModule(Module * m, User * u)
|
||||
return MOD_ERR_PARAMS;
|
||||
}
|
||||
|
||||
if (m->type == PROTOCOL || m->type == ENCRYPTION)
|
||||
if (m->GetPermanent() || m->type == PROTOCOL || m->type == ENCRYPTION)
|
||||
{
|
||||
if (u)
|
||||
notice_lang(s_OperServ, u, OPER_MODULE_NO_UNLOAD);
|
||||
|
||||
Reference in New Issue
Block a user