diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2022-02-19 15:53:47 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2022-03-11 20:28:57 -0500 |
| commit | a84856e299f91dfcc31ba0cd397f32e2aa13711d (patch) | |
| tree | a8f5df97dc6333ec740a133d602ba09ba36776ea | |
| parent | c7ffb77e1fdc2e9bc7a2de27c2feddf15e8b54ea (diff) | |
Use memory tracking API when in core for rapidjson
| -rw-r--r-- | filemetadata.cpp | 4 | ||||
| -rw-r--r-- | rapidjson/allocators.h | 30 | ||||
| -rw-r--r-- | settings.cpp | 10 | ||||
| -rw-r--r-- | workflow.cpp | 22 |
4 files changed, 51 insertions, 15 deletions
diff --git a/filemetadata.cpp b/filemetadata.cpp index 2b8dd553..e240cd1b 100644 --- a/filemetadata.cpp +++ b/filemetadata.cpp @@ -283,7 +283,9 @@ MergeResult FileMetadata::MergeUserAnalysis( BNMergeUserAnalysis(m_object, name.c_str(), &cb, DatabaseProgressCallback, tempList, numHashes); MergeResult result(bnResult); - BNFreeStringList(tempList, numHashes); + for (size_t i = 0; i < numHashes; i++) + BNFreeString(tempList[i]); + delete[] tempList; return result; } diff --git a/rapidjson/allocators.h b/rapidjson/allocators.h index 68fc35d1..663c62de 100644 --- a/rapidjson/allocators.h +++ b/rapidjson/allocators.h @@ -59,25 +59,47 @@ concept Allocator { /*! This class is just wrapper for standard C library memory routines. \note implements Allocator concept */ +#ifdef BINARYNINJACORE_LIBRARY class CrtAllocator { public: static const bool kNeedFree = true; void* Malloc(size_t size) { if (size) // behavior of malloc(0) is implementation defined. - return je_malloc(size); + return BinaryNinjaCore::bn_malloc<CrtAllocator>(size); else return NULL; // standardize to returning NULL. } void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { (void)originalSize; if (newSize == 0) { - je_free(originalPtr); + BinaryNinjaCore::bn_free(originalPtr); return NULL; } - return je_realloc(originalPtr, newSize); + return BinaryNinjaCore::bn_realloc<CrtAllocator>(originalPtr, newSize); } - static void Free(void *ptr) { je_free(ptr); } + static void Free(void* ptr) { BinaryNinjaCore::bn_free(ptr); } }; +#else +class CrtAllocator { +public: + static const bool kNeedFree = true; + void* Malloc(size_t size) { + if (size) // behavior of malloc(0) is implementation defined. + return malloc(size); + else + return NULL; // standardize to returning NULL. + } + void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { + (void)originalSize; + if (newSize == 0) { + free(originalPtr); + return NULL; + } + return realloc(originalPtr, newSize); + } + static void Free(void* ptr) { free(ptr); } +}; +#endif /////////////////////////////////////////////////////////////////////////////// // MemoryPoolAllocator diff --git a/settings.cpp b/settings.cpp index 5c244435..14d4f0e4 100644 --- a/settings.cpp +++ b/settings.cpp @@ -149,7 +149,10 @@ bool Settings::UpdateProperty( bool result = BNSettingsUpdateStringListProperty(m_object, key.c_str(), property.c_str(), (const char**)buffer, value.size()); - BNFreeStringList(buffer, value.size()); + + for (size_t i = 0; i < value.size(); i++) + BNFreeString(buffer[i]); + delete[] buffer; return result; } @@ -313,7 +316,10 @@ bool Settings::Set(const string& key, const vector<string>& value, Ref<BinaryVie bool result = BNSettingsSetStringList( m_object, view ? view->GetObject() : nullptr, scope, key.c_str(), (const char**)buffer, value.size()); - BNFreeStringList(buffer, value.size()); + + for (size_t i = 0; i < value.size(); i++) + BNFreeString(buffer[i]); + delete[] buffer; return result; } diff --git a/workflow.cpp b/workflow.cpp index d3a13950..a779b81f 100644 --- a/workflow.cpp +++ b/workflow.cpp @@ -164,7 +164,10 @@ bool Workflow::RegisterActivity(Ref<Activity> activity, const vector<string>& su bool result = BNWorkflowRegisterActivity( m_object, activity->GetObject(), (const char**)buffer, subactivities.size(), description.c_str()); - BNFreeStringList(buffer, subactivities.size()); + + for (size_t i = 0; i < subactivities.size(); i++) + BNFreeString(buffer[i]); + delete[] buffer; return result; } @@ -252,7 +255,10 @@ bool Workflow::AssignSubactivities(const string& activity, const vector<string>& buffer[i] = BNAllocString(subactivities[i].c_str()); bool result = BNWorkflowAssignSubactivities(m_object, activity.c_str(), (const char**)buffer, subactivities.size()); - BNFreeStringList(buffer, subactivities.size()); + + for (size_t i = 0; i < subactivities.size(); i++) + BNFreeString(buffer[i]); + delete[] buffer; return result; } @@ -265,14 +271,11 @@ bool Workflow::Clear() bool Workflow::Insert(const string& activity, const std::string& newActivity) { - char** buffer = new char*[1]; - if (!buffer) - return false; - + char* buffer[1]; buffer[0] = BNAllocString(newActivity.c_str()); bool result = BNWorkflowInsert(m_object, activity.c_str(), (const char**)buffer, 1); - BNFreeStringList(buffer, 1); + BNFreeString(buffer[0]); return result; } @@ -287,7 +290,10 @@ bool Workflow::Insert(const string& activity, const vector<string>& activities) buffer[i] = BNAllocString(activities[i].c_str()); bool result = BNWorkflowInsert(m_object, activity.c_str(), (const char**)buffer, activities.size()); - BNFreeStringList(buffer, activities.size()); + + for (size_t i = 0; i < activities.size(); i++) + BNFreeString(buffer[i]); + delete[] buffer; return result; } |
