3192f9e9f5ff6fe9b87cb0324352bf47a04714c0
[m6w6/libmemcached] / libmemcached / memcached_allocators.c
1 #include "common.h"
2
3 void libmemcached_free(memcached_st *ptr __attribute__((unused)), void *mem)
4 {
5 free(mem);
6 }
7
8 void *libmemcached_malloc(memcached_st *ptr __attribute__((unused)),
9 size_t size)
10 {
11 return malloc(size);
12 }
13
14 void *libmemcached_realloc(memcached_st *ptr __attribute__((unused)),
15 void *mem, size_t size)
16 {
17 return realloc(mem, size);
18 }
19
20 void *libmemcached_calloc(memcached_st *ptr __attribute__((unused)),
21 size_t nelem, size_t size)
22 {
23 if (ptr->call_malloc != libmemcached_malloc)
24 {
25 void *ret = libmemcached_malloc(ptr, nelem * size);
26 if (ret != NULL)
27 memset(ret, 0, nelem * size);
28
29 return ret;
30 }
31
32 return calloc(nelem, size);
33 }
34
35 memcached_return memcached_set_memory_allocators(memcached_st *ptr,
36 memcached_malloc_function mem_malloc,
37 memcached_free_function mem_free,
38 memcached_realloc_function mem_realloc,
39 memcached_calloc_function mem_calloc)
40 {
41 /* All should be set, or none should be set */
42 if (mem_malloc == NULL && mem_free == NULL && mem_realloc == NULL && mem_calloc == NULL)
43 {
44 ptr->call_malloc= libmemcached_malloc;
45 ptr->call_free= libmemcached_free;
46 ptr->call_realloc= libmemcached_realloc;
47 ptr->call_calloc= libmemcached_calloc;
48 }
49 else if (mem_malloc == NULL || mem_free == NULL || mem_realloc == NULL || mem_calloc == NULL)
50 return MEMCACHED_FAILURE;
51 else
52 {
53 ptr->call_malloc= mem_malloc;
54 ptr->call_free= mem_free;
55 ptr->call_realloc= mem_realloc;
56 ptr->call_calloc= mem_calloc;
57 }
58
59 return MEMCACHED_SUCCESS;
60 }
61
62 void memcached_get_memory_allocators(memcached_st *ptr,
63 memcached_malloc_function *mem_malloc,
64 memcached_free_function *mem_free,
65 memcached_realloc_function *mem_realloc,
66 memcached_calloc_function *mem_calloc)
67 {
68 *mem_malloc= ptr->call_malloc;
69 *mem_free= ptr->call_free;
70 *mem_realloc= ptr->call_realloc;
71 *mem_calloc= ptr->call_calloc;
72 }