diff options
Diffstat (limited to 'src/project.cpp')
| -rw-r--r-- | src/project.cpp | 20 |
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; |
