summaryrefslogtreecommitdiff
path: root/src/project.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/project.cpp')
-rw-r--r--src/project.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/project.cpp b/src/project.cpp
index 289d4b5..546ac8a 100644
--- a/src/project.cpp
+++ b/src/project.cpp
@@ -71,7 +71,7 @@ void Proj_SerializeEntityType(std::ostream &stream, const EntityType &et) {
NULL_CHAR_ARR(handleStr, 23);
NULL_CHAR_ARR(modelAssetKey, AssetKeyLength + 1);
NULL_CHAR_ARR(textureAssetKey, AssetKeyLength + 1);
- snprintf(handleStr, 22, "0x%08X 0x%08X", et.handle.bucketIndex, et.handle.itemIndex);
+ snprintf(handleStr, 22, "0x%08X 0x%08X", et.handle.b, et.handle.i);
snprintf(modelAssetKey, AssetKeyLength + 1, "%s", et.modelAssetKey);
EntityType e{};
if (modelAssetKey[0] != '\0')
@@ -174,7 +174,9 @@ void Proj_DeserializeEntityType(std::istream &stream) {
if (strcmp(PKE_PROJ_FILE_OBJ_END, projReadLine) == 0) {
EntityType *existingPtr = EntityType_FindByTypeCode(et.entityTypeCode.val);
if (existingPtr != nullptr) {
- // TODO leaks et.EntityTypeCode
+ if (et.entityTypeCode.reserved > 0) {
+ pk_delete<char>(et.entityTypeCode.val, et.entityTypeCode.reserved);
+ }
continue;
}
EntityType *etPtr = EntityType_Create(et.uuid);
@@ -209,10 +211,10 @@ void Proj_DeserializeEntityType(std::istream &stream) {
}
if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE)) {
uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE);
- uint64_t len = strlen(projReadLine + prefixLen) + 1;
- char *val = pk_new<char>(len);
- memset(reinterpret_cast<void *>(val), '\0', len);
- memcpy(val, projReadLine + prefixLen, len);
+ et.entityTypeCode.length = strlen(projReadLine + prefixLen) + 1;
+ et.entityTypeCode.reserved = et.entityTypeCode.length + 1;
+ char *val = pk_new<char>(et.entityTypeCode.reserved);
+ snprintf(val, et.entityTypeCode.reserved, "%s", projReadLine + prefixLen);
et.entityTypeCode.val = val;
continue;
}
@@ -220,8 +222,10 @@ void Proj_DeserializeEntityType(std::istream &stream) {
uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_HANDLE);
// 0x00000000 0x00000000
projReadLine[prefixLen + 10] = '\0';
- STR2NUM_ERROR result1 = str2num(et.handle.bucketIndex, projReadLine + prefixLen + 2, 16);
- STR2NUM_ERROR result2 = str2num(et.handle.itemIndex, projReadLine + prefixLen + 11, 16);
+ unsigned int b, i;
+ STR2NUM_ERROR result1 = str2num(b, projReadLine + prefixLen + 2, 16);
+ STR2NUM_ERROR result2 = str2num(i, projReadLine + prefixLen + 11, 16);
+ et.handle = EntityHandle { b, i };
assert(result1 == STR2NUM_ERROR::SUCCESS);
assert(result2 == STR2NUM_ERROR::SUCCESS);
continue;