//will create the offset if it needs to DWORD GetModuleNameOfs(const char *szName) { struct DBModuleName dbmn; int nameLen; DWORD ofsNew,ofsExisting; char *mod; ofsExisting=FindExistingModuleNameOfs(szName); if(ofsExisting) return ofsExisting; nameLen = (int)strlen(szName); //need to create the module name ofsNew=CreateNewSpace(nameLen+offsetof(struct DBModuleName,name)); dbmn.signature=DBMODULENAME_SIGNATURE; dbmn.cbName=nameLen; dbmn.ofsNext=dbHeader.ofsFirstModuleName; dbHeader.ofsFirstModuleName=ofsNew; DBWrite(0,&dbHeader,sizeof(dbHeader)); DBWrite(ofsNew,&dbmn,offsetof(struct DBModuleName,name)); DBWrite(ofsNew+offsetof(struct DBModuleName,name),(PVOID)szName,nameLen); DBFlush(0); //add to cache mod = (char*)HeapAlloc(hModHeap,0,nameLen+1); strcpy(mod,szName); AddToList(mod, nameLen, ofsNew); //quit return ofsNew; }
// will create the offset if it needs to DWORD CDbxKV::GetModuleNameOfs(const char *szName) { DWORD ofsExisting = FindExistingModuleNameOfs(szName); if (ofsExisting) return ofsExisting; if (m_bReadOnly) return 0; int nameLen = (int)strlen(szName); // need to create the module name int newIdx = ++m_maxModuleID; DBModuleName *pmod = (DBModuleName*)_alloca(sizeof(DBModuleName) + nameLen); pmod->dwSignature = DBMODULENAME_SIGNATURE; pmod->cbName = (char)nameLen; strcpy(pmod->name, szName); ham_key_t key = { sizeof(int), &newIdx }; ham_record_t rec = { sizeof(DBModuleName) + nameLen, pmod }; ham_db_insert(m_dbModules, NULL, &key, &rec, HAM_OVERWRITE); // add to cache char *mod = (char*)HeapAlloc(m_hModHeap, 0, nameLen + 1); strcpy(mod, szName); AddToList(mod, newIdx); // quit return -1; }
// will create the offset if it needs to DWORD CDb3Mmap::GetModuleNameOfs(const char *szName) { DWORD ofsExisting = FindExistingModuleNameOfs(szName); if (ofsExisting) return ofsExisting; if (m_bReadOnly) return 0; int nameLen = (int)mir_strlen(szName); // need to create the module name DWORD ofsNew = CreateNewSpace(nameLen + offsetof(struct DBModuleName, name)); DBModuleName dbmn; dbmn.signature = DBMODULENAME_SIGNATURE; dbmn.cbName = nameLen; dbmn.ofsNext = m_dbHeader.ofsModuleNames; m_dbHeader.ofsModuleNames = ofsNew; DBWrite(ofsNew, &dbmn, offsetof(struct DBModuleName, name)); DBWrite(ofsNew + offsetof(struct DBModuleName, name), (PVOID)szName, nameLen); DBWrite(0, &m_dbHeader, sizeof(m_dbHeader)); DBFlush(0); // add to cache char *mod = (char*)HeapAlloc(m_hModHeap, 0, nameLen + 1); mir_strcpy(mod, szName); AddToList(mod, ofsNew); // quit return ofsNew; }