diff --git a/libctru/include/3ds/allocator/linear.h b/libctru/include/3ds/allocator/linear.h index 8b09781..1e99367 100644 --- a/libctru/include/3ds/allocator/linear.h +++ b/libctru/include/3ds/allocator/linear.h @@ -28,6 +28,12 @@ void* linearMemAlign(size_t size, size_t alignment); */ void* linearRealloc(void* mem, size_t size); +/** + * @brief Retrieves the allocated size of a buffer. + * @return The size of the buffer. + */ +size_t linearGetSize(void* mem); + /** * @brief Frees a buffer. * @param mem Buffer to free. diff --git a/libctru/include/3ds/allocator/mappable.h b/libctru/include/3ds/allocator/mappable.h index 826bc74..6fabe93 100644 --- a/libctru/include/3ds/allocator/mappable.h +++ b/libctru/include/3ds/allocator/mappable.h @@ -5,15 +5,21 @@ #pragma once /** - * @brief Allocates a page-aligned buffer. - * @param size Size of the buffer to allocate. - * @return The allocated buffer. + * @brief Reserves a mappable memory area. + * @param size Size of the area to reserve. + * @return The mappable area. */ void* mappableAlloc(size_t size); /** - * @brief Frees a buffer. - * @param mem Buffer to free. + * @brief Retrieves the allocated size of a mappable area. + * @return The size of the mappable area. + */ +size_t mappableGetSize(void* mem); + +/** + * @brief Frees a mappable area. + * @param mem Mappable area to free. */ void mappableFree(void* mem); diff --git a/libctru/include/3ds/allocator/vram.h b/libctru/include/3ds/allocator/vram.h index 4355b2f..3658699 100644 --- a/libctru/include/3ds/allocator/vram.h +++ b/libctru/include/3ds/allocator/vram.h @@ -28,6 +28,12 @@ void* vramMemAlign(size_t size, size_t alignment); */ void* vramRealloc(void* mem, size_t size); +/** + * @brief Retrieves the allocated size of a buffer. + * @return The size of the buffer. + */ +size_t vramGetSize(void* mem); + /** * @brief Frees a buffer. * @param mem Buffer to free. diff --git a/libctru/source/allocator/linear.cpp b/libctru/source/allocator/linear.cpp index 05e86e0..8d8182a 100644 --- a/libctru/source/allocator/linear.cpp +++ b/libctru/source/allocator/linear.cpp @@ -71,6 +71,12 @@ void* linearRealloc(void* mem, size_t size) return NULL; } +size_t linearGetSize(void* mem) +{ + auto node = getNode(mem); + return node ? node->chunk.size : 0; +} + void linearFree(void* mem) { auto node = getNode(mem); diff --git a/libctru/source/allocator/mappable.cpp b/libctru/source/allocator/mappable.cpp index 19825bb..c75d7cd 100644 --- a/libctru/source/allocator/mappable.cpp +++ b/libctru/source/allocator/mappable.cpp @@ -43,6 +43,12 @@ void* mappableAlloc(size_t size) return chunk.addr; } +size_t mappableGetSize(void* mem) +{ + auto node = getNode(mem); + return node ? node->chunk.size : 0; +} + void mappableFree(void* mem) { auto node = getNode(mem); diff --git a/libctru/source/allocator/vram.cpp b/libctru/source/allocator/vram.cpp index 4161d7c..30498a5 100644 --- a/libctru/source/allocator/vram.cpp +++ b/libctru/source/allocator/vram.cpp @@ -68,6 +68,12 @@ void* vramRealloc(void* mem, size_t size) return NULL; } +size_t vramGetSize(void* mem) +{ + auto node = getNode(mem); + return node ? node->chunk.size : 0; +} + void vramFree(void* mem) { auto node = getNode(mem);