1 /*
2  * Copyright (C) 2018 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #include "lexbor/core/base.h"
8 
9 static lexbor_memory_malloc_f lexbor_memory_malloc = malloc;
10 static lexbor_memory_realloc_f lexbor_memory_realloc = realloc;
11 static lexbor_memory_calloc_f lexbor_memory_calloc = calloc;
12 static lexbor_memory_free_f lexbor_memory_free = free;
13 
14 void *
lexbor_malloc(size_t size)15 lexbor_malloc(size_t size)
16 {
17     return lexbor_memory_malloc(size);
18 }
19 
20 void *
lexbor_realloc(void * dst,size_t size)21 lexbor_realloc(void *dst, size_t size)
22 {
23     return lexbor_memory_realloc(dst, size);
24 }
25 
26 void *
lexbor_calloc(size_t num,size_t size)27 lexbor_calloc(size_t num, size_t size)
28 {
29     return lexbor_memory_calloc(num, size);
30 }
31 
32 void *
lexbor_free(void * dst)33 lexbor_free(void *dst)
34 {
35     lexbor_memory_free(dst);
36     return NULL;
37 }
38 
39 lxb_status_t
lexbor_memory_setup(lexbor_memory_malloc_f new_malloc,lexbor_memory_realloc_f new_realloc,lexbor_memory_calloc_f new_calloc,lexbor_memory_free_f new_free)40 lexbor_memory_setup(lexbor_memory_malloc_f new_malloc, lexbor_memory_realloc_f new_realloc,
41                     lexbor_memory_calloc_f new_calloc, lexbor_memory_free_f new_free)
42 {
43     if (new_malloc == NULL || new_realloc == NULL || new_calloc == NULL || new_free == NULL) {
44         return LXB_STATUS_ERROR_OBJECT_IS_NULL;
45     }
46 
47     lexbor_memory_malloc = new_malloc;
48     lexbor_memory_realloc = new_realloc;
49     lexbor_memory_calloc = new_calloc;
50     lexbor_memory_free = new_free;
51 
52     return LXB_STATUS_OK;
53 }
54