From a2493af9ce8f0547283d8ac511f2b38d468ddb35 Mon Sep 17 00:00:00 2001 From: rdbaris <31486867+rdbaris@users.noreply.github.com> Date: Thu, 16 Jul 2020 17:35:30 -0400 Subject: [PATCH] Part of #11159 (purge malloc() & free()) (#11893) * Used smart pointers * Changed functions to take vector as input --- contributors.md | 2 ++ src/openrct2/CmdlineSprite.cpp | 14 ++++---------- src/openrct2/EditorObjectSelectionSession.cpp | 3 +-- src/openrct2/object/ObjectManager.cpp | 4 ++-- src/openrct2/object/ObjectManager.h | 4 ++-- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/contributors.md b/contributors.md index c373c9c3ec..30a9a3cfff 100644 --- a/contributors.md +++ b/contributors.md @@ -145,6 +145,8 @@ The following people are not part of the development team, but have been contrib * Mustapha Elghoul (mustaphaelghoul) * Tyler Leamon (tylerleamon) * Michael Coates (outerwear) +* Reid Baris (Rdbaris) +* Deanna Baris (dbaris) ## Toolchain * (Balletie) - macOS diff --git a/src/openrct2/CmdlineSprite.cpp b/src/openrct2/CmdlineSprite.cpp index 99d42fa2e9..ed6aa02f9a 100644 --- a/src/openrct2/CmdlineSprite.cpp +++ b/src/openrct2/CmdlineSprite.cpp @@ -91,16 +91,15 @@ static bool sprite_file_open(const utf8* path) if (spriteFileHeader.num_entries > 0) { int32_t openEntryTableSize = spriteFileHeader.num_entries * sizeof(rct_g1_element_32bit); - rct_g1_element_32bit* openElements = static_cast(malloc(openEntryTableSize)); + std::unique_ptr openElements = std::make_unique(openEntryTableSize); if (openElements == nullptr) { fclose(file); return false; } - if (fread(openElements, openEntryTableSize, 1, file) != 1) + if (fread(openElements.get(), openEntryTableSize, 1, file) != 1) { - free(openElements); fclose(file); return false; } @@ -109,7 +108,6 @@ static bool sprite_file_open(const utf8* path) if (fread(spriteFileData, spriteFileHeader.total_size, 1, file) != 1) { free(spriteFileData); - free(openElements); fclose(file); return false; } @@ -130,8 +128,6 @@ static bool sprite_file_open(const utf8* path) outElement->flags = inElement->flags; outElement->zoomed_offset = inElement->zoomed_offset; } - - free(openElements); } fclose(file); @@ -153,7 +149,7 @@ static bool sprite_file_save(const char* path) if (spriteFileHeader.num_entries > 0) { int32_t saveEntryTableSize = spriteFileHeader.num_entries * sizeof(rct_g1_element_32bit); - rct_g1_element_32bit* saveElements = static_cast(malloc(saveEntryTableSize)); + std::unique_ptr saveElements = std::make_unique(saveEntryTableSize); if (saveElements == nullptr) { fclose(file); @@ -175,13 +171,11 @@ static bool sprite_file_save(const char* path) outElement->zoomed_offset = inElement->zoomed_offset; } - if (fwrite(saveElements, saveEntryTableSize, 1, file) != 1) + if (fwrite(saveElements.get(), saveEntryTableSize, 1, file) != 1) { - free(saveElements); fclose(file); return false; } - free(saveElements); if (fwrite(spriteFileData, spriteFileHeader.total_size, 1, file) != 1) { diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index 919204a282..ba5ce432ff 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -321,7 +321,7 @@ void unload_unselected_objects() const ObjectRepositoryItem* items = object_repository_get_items(); size_t numObjectsToUnload = 0; - rct_object_entry* objectsToUnload = static_cast(malloc(numItems * sizeof(rct_object_entry))); + std::vector objectsToUnload; for (int32_t i = 0; i < numItems; i++) { @@ -335,7 +335,6 @@ void unload_unselected_objects() } object_manager_unload_objects(objectsToUnload, numObjectsToUnload); - free(objectsToUnload); } /** diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 42a458fd9d..21dc9984b4 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -147,7 +147,7 @@ public: log_verbose("%u / %u new objects loaded", numNewLoadedObjects, requiredObjects.size()); } - void UnloadObjects(const rct_object_entry* entries, size_t count) override + void UnloadObjects(const std::vector& entries, size_t count) override { // TODO there are two performance issues here: // - FindObject for every entry which is a dictionary lookup @@ -747,7 +747,7 @@ void* object_manager_load_object(const rct_object_entry* entry) return static_cast(loadedObject); } -void object_manager_unload_objects(const rct_object_entry* entries, size_t count) +void object_manager_unload_objects(const std::vector& entries, size_t count) { auto& objectManager = OpenRCT2::GetContext()->GetObjectManager(); objectManager.UnloadObjects(entries, count); diff --git a/src/openrct2/object/ObjectManager.h b/src/openrct2/object/ObjectManager.h index 7f382e458a..d2a52717b2 100644 --- a/src/openrct2/object/ObjectManager.h +++ b/src/openrct2/object/ObjectManager.h @@ -33,7 +33,7 @@ interface IObjectManager virtual Object* LoadObject(const rct_object_entry* entry) abstract; virtual void LoadObjects(const rct_object_entry* entries, size_t count) abstract; virtual void LoadDefaultObjects() abstract; - virtual void UnloadObjects(const rct_object_entry* entries, size_t count) abstract; + virtual void UnloadObjects(const std::vector& entries, size_t count) abstract; virtual void UnloadAll() abstract; virtual void ResetObjects() abstract; @@ -48,6 +48,6 @@ void* object_manager_get_loaded_object_by_index(size_t index); void* object_manager_get_loaded_object(const rct_object_entry* entry); ObjectEntryIndex object_manager_get_loaded_object_entry_index(const void* loadedObject); void* object_manager_load_object(const rct_object_entry* entry); -void object_manager_unload_objects(const rct_object_entry* entries, size_t count); +void object_manager_unload_objects(const std::vector& entries, size_t count); void object_manager_unload_all_objects(); rct_string_id object_manager_get_source_game_string(const uint8_t sourceGame);