aboutsummaryrefslogtreecommitdiffstats
path: root/include/slibc-alloc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/slibc-alloc.h')
-rw-r--r--include/slibc-alloc.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/slibc-alloc.h b/include/slibc-alloc.h
index 3c92fcf..7bd2e81 100644
--- a/include/slibc-alloc.h
+++ b/include/slibc-alloc.h
@@ -109,6 +109,31 @@ void* secure_realloc(void*, size_t)
__GCC_ONLY(__attribute__((warn_unused_result)));
/**
+ * This function behaves exactly like `realloc`,
+ * except you can freely select what memory it clears.
+ *
+ * `crealloc(p, n)` is equivalent to (but slightly fast than)
+ * `custom_realloc(p, n, 1, 1, 1)`.
+ *
+ * `fast_realloc(p, n)` is equivalent to (but slightly fast than)
+ * `custom_realloc(p, n, 0, 0, 0)`.
+ *
+ * `secure_realloc(p, n)` is equivalent to (but slightly fast than)
+ * `custom_realloc(p, n, 1, 0, 1)`.
+ *
+ * @param ptr The old allocation, see `realloc` for more details.
+ * @param size The new allocation size, see `realloc` for more details.
+ * @param clear_old Whether the disowned area is cleared, even if `ptr` is returned.
+ * @param clear_new Whether the newly claimed area is cleared.
+ * @param clear_free Whether the old allocation is cleared if a new pointer is returned.
+ * @return The new allocation, see `realloc` for more details.
+ *
+ * @throws ENOMEM The process cannot allocate more memory.
+ */
+void* custom_realloc(void*, size_t, int, int, int)
+ __GCC_ONLY(__attribute__((warn_unused_result)));
+
+/**
* This function behaves exactly like `fast_realloc`, except:
* - Its behaviour is undefined if `ptr` is `NULL`.
* - Its behaviour is undefined if `size` equals the old allocation size.