summaryrefslogtreecommitdiff
path: root/plugins/Dbx_kv
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Dbx_kv')
-rw-r--r--plugins/Dbx_kv/src/dbintf.h1
-rw-r--r--plugins/Dbx_kv/src/dbmodulechain.cpp19
2 files changed, 16 insertions, 4 deletions
diff --git a/plugins/Dbx_kv/src/dbintf.h b/plugins/Dbx_kv/src/dbintf.h
index 4a65db7fda..b9decbc0c3 100644
--- a/plugins/Dbx_kv/src/dbintf.h
+++ b/plugins/Dbx_kv/src/dbintf.h
@@ -262,6 +262,7 @@ protected:
HANDLE hEventAddedEvent, hEventDeletedEvent, hEventFilterAddedEvent;
MCONTACT m_hLastCachedContact;
int m_maxModuleID;
+ ModuleName *m_lastmn;
void AddToList(char *name, DWORD ofs);
DWORD FindExistingModuleNameOfs(const char *szName);
diff --git a/plugins/Dbx_kv/src/dbmodulechain.cpp b/plugins/Dbx_kv/src/dbmodulechain.cpp
index d1491fc68a..2f6b71e401 100644
--- a/plugins/Dbx_kv/src/dbmodulechain.cpp
+++ b/plugins/Dbx_kv/src/dbmodulechain.cpp
@@ -70,10 +70,15 @@ int CDbxKV::InitModuleNames(void)
DWORD CDbxKV::FindExistingModuleNameOfs(const char *szName)
{
ModuleName mn = { (char*)szName, 0 };
+ if (m_lastmn && !strcmp(mn.name, m_lastmn->name))
+ return m_lastmn->ofs;
int index = m_lMods.getIndex(&mn);
- if (index != -1)
- return m_lMods[index]->ofs;
+ if (index != -1) {
+ ModuleName *pmn = m_lMods[index];
+ m_lastmn = pmn;
+ return pmn->ofs;
+ }
return 0;
}
@@ -112,10 +117,16 @@ DWORD CDbxKV::GetModuleNameOfs(const char *szName)
char* CDbxKV::GetModuleNameByOfs(DWORD ofs)
{
+ if (m_lastmn && m_lastmn->ofs == ofs)
+ return m_lastmn->name;
+
ModuleName mn = { NULL, ofs };
int index = m_lOfs.getIndex(&mn);
- if (index != -1)
- return m_lOfs[index]->name;
+ if (index != -1) {
+ ModuleName *pmn = m_lOfs[index];
+ m_lastmn = pmn;
+ return pmn->name;
+ }
return NULL;
}