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(); };