fix saving issue

- fix CKStateChunk resize memory error.
- fix wrong CKBitmapHandler free position in CKBitmapData writer.
- fix init value error of CKFileWriter::m_DisableAddingFile when copying from reader.
- fix ReadString, WriteString error in CKStateChunk (forget NULL terminal)
- change CKPathManager resolve path order. Resolve temp path first, then resources folder.
- fix mixdata combine error when writing CKTexture.
This commit is contained in:
2023-09-30 16:01:39 +08:00
parent abea66d6f0
commit ee4b621cac
10 changed files with 62 additions and 36 deletions

View File

@ -261,18 +261,26 @@ namespace LibCmo::CK2 {
delete[] this->m_pData;
this->m_pData = nullptr;
}
// set buf size
this->m_Parser.m_DataSize = 0u;
} else {
// otherwise, we create a new buffer instead it
CKDWORD* newbuf = new CKDWORD[new_dwsize];
// if no original data, we do not need copy it and free it
// we copy original data only when it has.
if (this->m_pData != nullptr) {
std::memcpy(newbuf, this->m_pData, sizeof(CKDWORD) * new_dwsize);
// MARK: use std::min to copy for the minilist one
// otherwise, EnsureWriteSpace or StopWrite will crash.
std::memcpy(newbuf, this->m_pData, sizeof(CKDWORD) * std::min(this->m_Parser.m_DataSize, new_dwsize));
delete[] this->m_pData;
}
// assign new buffer
this->m_pData = newbuf;
// set buf size
this->m_Parser.m_DataSize = new_dwsize;
}
return true;
@ -290,9 +298,6 @@ namespace LibCmo::CK2 {
// try resizing it
if (!this->ResizeBuffer(needed)) return false;
// update size
this->m_Parser.m_DataSize = needed;
}
return true;