aboutsummaryrefslogtreecommitdiff
path: root/src/util/memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/memory.c')
-rw-r--r--src/util/memory.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/util/memory.c b/src/util/memory.c
index 53f68c9..6051459 100644
--- a/src/util/memory.c
+++ b/src/util/memory.c
@@ -5,7 +5,6 @@
#include "memory.h"
#include <pari/pari.h>
-
static void *(*malloc_func)(size_t) = pari_malloc;
static void *(*calloc_func)(size_t) = pari_calloc;
@@ -25,9 +24,7 @@ void *alloc(void *(*fun)(size_t), size_t size) {
void *try_malloc(size_t size) { return alloc(malloc_func, size); }
-void *try_calloc(size_t size) {
- return alloc(calloc_func, size);
-}
+void *try_calloc(size_t size) { return alloc(calloc_func, size); }
void *try_realloc(void *ptr, size_t size) {
void *result = realloc_func(ptr, size);
@@ -38,13 +35,22 @@ void *try_realloc(void *ptr, size_t size) {
return result;
}
-void try_free(void *ptr) {
- free_func(ptr);
+char *try_strdup(const char *str) {
+ size_t len = strlen(str);
+ return try_memdup(str, len + 1);
+}
+
+void *try_memdup(const void *mem, size_t len) {
+ void *result = try_malloc(len);
+ memcpy(result, mem, len);
+ return result;
}
+void try_free(void *ptr) { free_func(ptr); }
+
void set_mem_funcs(void *(*malloc_fun)(size_t), void *(*calloc_fun)(size_t),
- void *(*realloc_fun)(void *, size_t),
- void(*free_fun)(void *)) {
+ void *(*realloc_fun)(void *, size_t),
+ void (*free_fun)(void *)) {
malloc_func = malloc_fun;
calloc_func = calloc_fun;
realloc_func = realloc_fun;