Added ability to load modules as 'fake' just to act as a placeholder

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@519 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
prozacx
2005-09-22 07:05:21 +00:00
parent 32201f7ed3
commit 3e35a07303
2 changed files with 33 additions and 3 deletions

View File

@@ -160,6 +160,7 @@ const CString& CSocket::GetLabel() const { return m_sLabel; }
/////////////////// !Socket ///////////////////
CModule::CModule(void* pDLL, CUser* pUser, const CString& sModName) {
m_bFake = false;
m_pDLL = pDLL;
m_pManager = &(CZNC::Get().GetManager());;
m_pUser = pUser;
@@ -172,6 +173,7 @@ CModule::CModule(void* pDLL, CUser* pUser, const CString& sModName) {
}
CModule::CModule(void* pDLL, const CString& sModName) {
m_bFake = false;
m_pDLL = pDLL;
m_pManager = &(CZNC::Get().GetManager());
m_pUser = NULL;
@@ -497,7 +499,9 @@ CModules::CModules() {
m_pUser = NULL;
}
CModules::~CModules() {}
CModules::~CModules() {
UnloadAll();
}
void CModules::UnloadAll() {
while (size()) {
@@ -666,7 +670,7 @@ CModule* CModules::FindModule(const CString& sModule) const {
return NULL;
}
bool CModules::LoadModule(const CString& sModule, const CString& sArgs, CUser* pUser, CString& sRetMsg) {
bool CModules::LoadModule(const CString& sModule, const CString& sArgs, CUser* pUser, CString& sRetMsg, bool bFake) {
#ifndef _MODULES
sRetMsg = "Unable to load module [" + sModule + "] module support was not enabled.";
return false;
@@ -692,6 +696,16 @@ bool CModules::LoadModule(const CString& sModule, const CString& sArgs, CUser* p
return false;
}
if (bFake) {
CModule* pModule = new CModule(NULL, sModule);
pModule->SetArgs(sArgs);
pModule->SetDescription("<<Fake Module>>");
pModule->SetFake(true);
push_back(pModule);
sRetMsg = "Loaded fake module [" + sModule + "] [" + sModPath + "]";
return true;
}
unsigned int uDLFlags = RTLD_LAZY;
if (!pUser) {
@@ -808,6 +822,19 @@ bool CModules::UnloadModule(const CString& sModule, CString& sRetMsg) {
return false;
}
if (pModule->IsFake()) {
for (iterator it = begin(); it != end(); it++) {
if (*it == pModule) {
erase(it);
sRetMsg = "Fake module [" + sMod + "] unloaded";
return true;
}
}
sRetMsg = "Fake module [" + sMod + "] not loaded.";
return false;
}
void* p = pModule->GetDLL();
if (p) {