From a77e8ae1cd0521abff12be11d76d9ded36aebeeb Mon Sep 17 00:00:00 2001 From: fincs Date: Mon, 3 Nov 2014 20:20:33 +0100 Subject: [PATCH] Add linearSpaceFree() for retrieving the free space in the linear heap --- libctru/include/3ds/linear.h | 1 + libctru/source/allocator/linear.cpp | 5 +++++ libctru/source/allocator/mem_pool.cpp | 8 ++++++++ libctru/source/allocator/mem_pool.h | 1 + 4 files changed, 15 insertions(+) diff --git a/libctru/include/3ds/linear.h b/libctru/include/3ds/linear.h index f42a8b9..ae4c915 100644 --- a/libctru/include/3ds/linear.h +++ b/libctru/include/3ds/linear.h @@ -4,3 +4,4 @@ void* linearAlloc(size_t size); void* linearRealloc(void* mem, size_t size); void linearFree(void* mem); +u32 linearSpaceFree(); // get free linear space in bytes diff --git a/libctru/source/allocator/linear.cpp b/libctru/source/allocator/linear.cpp index a7581e8..83d1143 100644 --- a/libctru/source/allocator/linear.cpp +++ b/libctru/source/allocator/linear.cpp @@ -48,3 +48,8 @@ void linearFree(void* mem) auto pChunk = (MemChunk*)((u8*)mem - 16); sLinearPool.Deallocate(*pChunk); } + +u32 linearSpaceFree() +{ + return sLinearPool.GetFreeSpace(); +} diff --git a/libctru/source/allocator/mem_pool.cpp b/libctru/source/allocator/mem_pool.cpp index 93eeb4f..2c32638 100644 --- a/libctru/source/allocator/mem_pool.cpp +++ b/libctru/source/allocator/mem_pool.cpp @@ -123,3 +123,11 @@ void MemPool::Dump(const char* title) printf(" - %p (%u bytes)\n", b->base, b->size); } */ + +u32 MemPool::GetFreeSpace() +{ + u32 acc = 0; + for (auto b = first; b; b = b->next) + acc += b->size; + return acc; +} diff --git a/libctru/source/allocator/mem_pool.h b/libctru/source/allocator/mem_pool.h index 7237f49..b75d195 100644 --- a/libctru/source/allocator/mem_pool.h +++ b/libctru/source/allocator/mem_pool.h @@ -85,4 +85,5 @@ struct MemPool } //void Dump(const char* title); + u32 GetFreeSpace(); };