aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorJ08nY2017-08-30 14:22:20 +0200
committerJ08nY2017-08-30 14:22:20 +0200
commitbc643ab1903239d039f6b9527cb21029a886561d (patch)
tree0b6c690978561bd2536cbea2062544788fd19fee /src/util
parentbc4749776a3afae643788b8286f26596f70d142b (diff)
downloadecgen-bc643ab1903239d039f6b9527cb21029a886561d.tar.gz
ecgen-bc643ab1903239d039f6b9527cb21029a886561d.tar.zst
ecgen-bc643ab1903239d039f6b9527cb21029a886561d.zip
Use correct allocation functions. Add try_free.
Diffstat (limited to 'src/util')
-rw-r--r--src/util/memory.c30
-rw-r--r--src/util/memory.h17
2 files changed, 44 insertions, 3 deletions
diff --git a/src/util/memory.c b/src/util/memory.c
index d7d4b48..53f68c9 100644
--- a/src/util/memory.c
+++ b/src/util/memory.c
@@ -5,6 +5,15 @@
#include "memory.h"
#include <pari/pari.h>
+
+static void *(*malloc_func)(size_t) = pari_malloc;
+
+static void *(*calloc_func)(size_t) = pari_calloc;
+
+static void *(*realloc_func)(void *, size_t) = pari_realloc;
+
+static void (*free_func)(void *) = pari_free;
+
void *alloc(void *(*fun)(size_t), size_t size) {
void *result = fun(size);
if (!result) {
@@ -14,15 +23,30 @@ void *alloc(void *(*fun)(size_t), size_t size) {
return result;
}
-void *try_malloc(size_t size) { return alloc(pari_malloc, size); }
+void *try_malloc(size_t size) { return alloc(malloc_func, size); }
-void *try_calloc(size_t size) { return alloc(pari_calloc, size); }
+void *try_calloc(size_t size) {
+ return alloc(calloc_func, size);
+}
void *try_realloc(void *ptr, size_t size) {
- void *result = pari_realloc(ptr, size);
+ void *result = realloc_func(ptr, size);
if (!result) {
perror("Couldn't alloc.");
exit(EXIT_FAILURE);
}
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 *)) {
+ malloc_func = malloc_fun;
+ calloc_func = calloc_fun;
+ realloc_func = realloc_fun;
+ free_func = free_fun;
+} \ No newline at end of file
diff --git a/src/util/memory.h b/src/util/memory.h
index 55e8eac..7070430 100644
--- a/src/util/memory.h
+++ b/src/util/memory.h
@@ -32,4 +32,21 @@ void *try_calloc(size_t size);
*/
void *try_realloc(void *ptr, size_t size);
+/**
+ * @brief
+ * @param ptr
+ */
+void try_free(void *ptr);
+
+/**
+ * @brief
+ * @param malloc_fun
+ * @param calloc_fun
+ * @param realloc_fun
+ * @param free_fun
+ */
+void set_mem_funcs(void *(*malloc_fun)(size_t), void *(*calloc_fun)(size_t),
+ void *(*realloc_fun)(void *, size_t),
+ void(*free_fun)(void *));
+
#endif // ECGEN_MEMORY_H