summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/Db3x_mmap/src/dbsettings.cpp91
-rw-r--r--src/modules/extraicons/IcolibExtraIcon.cpp13
2 files changed, 51 insertions, 53 deletions
diff --git a/plugins/Db3x_mmap/src/dbsettings.cpp b/plugins/Db3x_mmap/src/dbsettings.cpp
index 73e2043245..55c43622d4 100644
--- a/plugins/Db3x_mmap/src/dbsettings.cpp
+++ b/plugins/Db3x_mmap/src/dbsettings.cpp
@@ -645,60 +645,59 @@ STDMETHODIMP_(BOOL) CDb3Base::DeleteContactSetting(HANDLE hContact, DBCONTACTGET
return 1;
}
- mir_cslockfull lck(m_csDbAccess);
- ofsModuleName = GetModuleNameOfs(dbcgs->szModule);
- if (hContact == 0)
- hContact = (HANDLE)m_dbHeader.ofsUser;
-
- dbc = (DBContact*)DBRead(hContact,sizeof(DBContact),NULL);
- if (dbc->signature != DBCONTACT_SIGNATURE)
- return 1;
+ szCachedSettingName = m_cache->GetCachedSetting(dbcgs->szModule,dbcgs->szSetting,moduleNameLen,settingNameLen);
+ if (szCachedSettingName[-1] == 0) { // it's not a resident variable
+ mir_cslock lck(m_csDbAccess);
+ ofsModuleName = GetModuleNameOfs(dbcgs->szModule);
+ if (hContact == 0)
+ hContact = (HANDLE)m_dbHeader.ofsUser;
+
+ dbc = (DBContact*)DBRead(hContact,sizeof(DBContact),NULL);
+ if (dbc->signature != DBCONTACT_SIGNATURE)
+ return 1;
- //make sure the module group exists
- ofsSettingsGroup = GetSettingsGroupOfsByModuleNameOfs(dbc,(DWORD)hContact,ofsModuleName);
- if (ofsSettingsGroup == 0)
- return 1;
+ //make sure the module group exists
+ ofsSettingsGroup = GetSettingsGroupOfsByModuleNameOfs(dbc,(DWORD)hContact,ofsModuleName);
+ if (ofsSettingsGroup == 0)
+ return 1;
- //find if the setting exists
- ofsBlobPtr = ofsSettingsGroup+offsetof(DBContactSettings,blob);
- pBlob = (PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining);
- while (pBlob[0]) {
- NeedBytes(settingNameLen+1);
- if (pBlob[0] == settingNameLen && !memcmp(pBlob+1,dbcgs->szSetting,settingNameLen))
- break;
- NeedBytes(1);
- MoveAlong(pBlob[0]+1);
- NeedBytes(3);
- MoveAlong(1+GetSettingValueLength(pBlob));
- NeedBytes(1);
- }
- if (!pBlob[0]) //setting didn't exist
- return 1;
+ //find if the setting exists
+ ofsBlobPtr = ofsSettingsGroup+offsetof(DBContactSettings,blob);
+ pBlob = (PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining);
+ while (pBlob[0]) {
+ NeedBytes(settingNameLen+1);
+ if (pBlob[0] == settingNameLen && !memcmp(pBlob+1,dbcgs->szSetting,settingNameLen))
+ break;
+ NeedBytes(1);
+ MoveAlong(pBlob[0]+1);
+ NeedBytes(3);
+ MoveAlong(1+GetSettingValueLength(pBlob));
+ NeedBytes(1);
+ }
+ if (!pBlob[0]) //setting didn't exist
+ return 1;
- //bin it
- int nameLen,valLen;
- DWORD ofsSettingToCut;
- MoveAlong(1+settingNameLen);
- NeedBytes(3);
- nameLen = 1+settingNameLen;
- valLen = 1+GetSettingValueLength(pBlob);
- ofsSettingToCut = ofsBlobPtr-nameLen;
- MoveAlong(valLen);
- NeedBytes(1);
- while (pBlob[0]) {
- MoveAlong(pBlob[0]+1);
+ //bin it
+ int nameLen,valLen;
+ DWORD ofsSettingToCut;
+ MoveAlong(1+settingNameLen);
NeedBytes(3);
- MoveAlong(1+GetSettingValueLength(pBlob));
+ nameLen = 1+settingNameLen;
+ valLen = 1+GetSettingValueLength(pBlob);
+ ofsSettingToCut = ofsBlobPtr-nameLen;
+ MoveAlong(valLen);
NeedBytes(1);
+ while (pBlob[0]) {
+ MoveAlong(pBlob[0]+1);
+ NeedBytes(3);
+ MoveAlong(1+GetSettingValueLength(pBlob));
+ NeedBytes(1);
+ }
+ DBMoveChunk(ofsSettingToCut,ofsSettingToCut+nameLen+valLen,ofsBlobPtr+1-ofsSettingToCut);
+ DBFlush(1);
}
- DBMoveChunk(ofsSettingToCut,ofsSettingToCut+nameLen+valLen,ofsBlobPtr+1-ofsSettingToCut);
- szCachedSettingName = m_cache->GetCachedSetting(dbcgs->szModule,dbcgs->szSetting,moduleNameLen,settingNameLen);
m_cache->GetCachedValuePtr((HANDLE)saveWparam, szCachedSettingName, -1 );
-
- //quit
- DBFlush(1);
- lck.unlock();
//notify
DBCONTACTWRITESETTING dbcws = {0};
diff --git a/src/modules/extraicons/IcolibExtraIcon.cpp b/src/modules/extraicons/IcolibExtraIcon.cpp
index e5727eac53..f6ff24300f 100644
--- a/src/modules/extraicons/IcolibExtraIcon.cpp
+++ b/src/modules/extraicons/IcolibExtraIcon.cpp
@@ -30,11 +30,9 @@ IcolibExtraIcon::IcolibExtraIcon(int _id, const char *_name, const TCHAR *_descr
MIRANDAHOOKPARAM _OnClick, LPARAM _param) :
BaseExtraIcon(_id, _name, _description, _descIcon, _OnClick, _param)
{
- #ifndef _DEBUG
- char setting[512];
- mir_snprintf(setting, SIZEOF(setting), "%s/%s", MODULE_NAME, _name);
- CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (WPARAM) setting);
- #endif
+ char setting[512];
+ mir_snprintf(setting, SIZEOF(setting), "%s/%s", MODULE_NAME, _name);
+ CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (WPARAM) setting);
}
IcolibExtraIcon::~IcolibExtraIcon()
@@ -129,6 +127,7 @@ void IcolibExtraIcon::storeIcon(HANDLE hContact, void *icon)
const char *icolibName = (const char *) icon;
if ( IsEmpty(icolibName))
- icolibName = "";
- db_set_s(hContact, MODULE_NAME, name.c_str(), icolibName);
+ db_unset(hContact, MODULE_NAME, name.c_str());
+ else
+ db_set_s(hContact, MODULE_NAME, name.c_str(), icolibName);
}