static INT_PTR SetSettingResident(WPARAM wParam, LPARAM lParam) { size_t cbSettingNameLen = strlen(( char* )lParam) + 2; if (cbSettingNameLen < 512) { char* szSetting; int idx; char szTemp[512]; strcpy( szTemp+1, ( char* )lParam ); EnterCriticalSection(&csDbAccess); if ( !li.List_GetIndex( &lSettings, szTemp, &idx )) szSetting = InsertCachedSetting( szTemp, cbSettingNameLen, idx ); else szSetting = lSettings.items[ idx ]; *szSetting = (char)wParam; if ( !li.List_GetIndex( &lResidentSettings, szSetting+1, &idx )) { if (wParam) li.List_Insert(&lResidentSettings,szSetting+1,idx); } else if (!wParam) li.List_Remove(&lResidentSettings,idx); LeaveCriticalSection(&csDbAccess); } return 0; }
static char* GetCachedSetting(const char *szModuleName,const char *szSettingName,int settingNameLen) { static char *lastsetting = NULL; int moduleNameLen = (int)strlen(szModuleName),index; char *szFullName = (char*)alloca(moduleNameLen+settingNameLen+3); strcpy(szFullName+1,szModuleName); szFullName[moduleNameLen+1]='/'; strcpy(szFullName+moduleNameLen+2,szSettingName); if (lastsetting && strcmp(szFullName+1,lastsetting) == 0) return lastsetting; if ( li.List_GetIndex(&lSettings, szFullName, &index)) lastsetting = (char*)lSettings.items[index] + 1; else lastsetting = InsertCachedSetting( szFullName, moduleNameLen+settingNameLen+3, index )+1; return lastsetting; }
static INT_PTR SetSettingResident(WPARAM wParam,LPARAM lParam) { char* szSetting; size_t cbSettingNameLen = strlen(( char* )lParam ); int idx; char* szTemp = ( char* )alloca( cbSettingNameLen+2 ); strcpy( szTemp+1, ( char* )lParam ); EnterCriticalSection(&csDbAccess); if ( !li.List_GetIndex( &lSettings, szTemp, &idx )) szSetting = InsertCachedSetting( szTemp, cbSettingNameLen+2, idx ); else szSetting = lSettings.items[ idx ]; *szSetting = (char)wParam; LeaveCriticalSection(&csDbAccess); return 0; }
char* MDatabaseCache::GetCachedSetting(const char *szModuleName, const char *szSettingName, int moduleNameLen, int settingNameLen) { char szFullName[512]; const char *szKey; if (szModuleName != NULL) { strcpy(szFullName, szModuleName); szFullName[moduleNameLen] = '/'; strcpy(szFullName + moduleNameLen + 1, szSettingName); szKey = szFullName; } else szKey = szSettingName; if (m_lastSetting && !strcmp(szKey, m_lastSetting)) return m_lastSetting; int index = m_lSettings.getIndex((char*)szKey); if (index != -1) m_lastSetting = m_lSettings[index]; else m_lastSetting = InsertCachedSetting(szKey, settingNameLen + moduleNameLen + 3); return m_lastSetting; }