//we are assumed to be in a mutex here void DBWrite(DWORD ofs,PVOID pData,int bytes) { log2("write %d@%08x",bytes,ofs); if (ofs+bytes>dwFileSize) ReMap(ofs+bytes-dwFileSize); MoveMemory(pDbCache+ofs,pData,bytes); logg(); }
DWORD CDb3Mmap::CreateNewSpace(int bytes) { DWORD ofsNew = m_dbHeader.ofsFileEnd; m_dbHeader.ofsFileEnd += bytes; if (m_dbHeader.ofsFileEnd > m_dwFileSize) ReMap(m_dbHeader.ofsFileEnd - m_dwFileSize); DBWrite(0, &m_dbHeader, sizeof(m_dbHeader)); log2("newspace %d@%08x", bytes, ofsNew); return ofsNew; }
void CStkFile::ReMapFromBegin(int nCount) { if (m_bShareMem == FALSE && m_hFile == (HANDLE)hFileNull || m_hFileMap == NULL) { ASSERT(FALSE); return; } SeekToBegin(); ReMap(nCount); }
void DBMoveChunk(DWORD ofsDest,DWORD ofsSource,int bytes) { int x = 0; log3("move %d %08x->%08x",bytes,ofsSource,ofsDest); if (ofsDest+bytes>dwFileSize) ReMap(ofsDest+bytes-dwFileSize); if (ofsSource+bytes>dwFileSize) { x = ofsSource+bytes-dwFileSize; log0("buggy move!"); _ASSERT(0); } if (x > 0) ZeroMemory(pDbCache+ofsDest+bytes-x, x); if (ofsSource < dwFileSize) MoveMemory(pDbCache+ofsDest,pDbCache+ofsSource, bytes-x); logg(); }
void CStkFile::Write(const void* lpBuf, UINT nCount) { ASSERT(m_bShareMem == TRUE || m_hFile != (HANDLE)hFileNull); if (m_bShareMem == FALSE && m_hFile == (HANDLE)hFileNull || m_hFileMap == NULL) { ASSERT(FALSE); return; } if (nCount == 0) return; if (ReMap(nCount) == FALSE) return; ASSERT(lpBuf != NULL); ASSERT(AfxIsValidAddress(lpBuf, nCount, FALSE)); memcpy(m_lpvFileCurrent, lpBuf, nCount); m_lpvFileCurrent += nCount; if (m_lpvFileCurrent > m_lpvFileEnd) m_lpvFileEnd = m_lpvFileCurrent; }