3 void _libmemcached_free(const memcached_st
*ptr
, void *mem
, void *context
)
10 void *_libmemcached_malloc(const memcached_st
*ptr
, size_t size
, void *context
)
17 void *_libmemcached_realloc(const memcached_st
*ptr
, void *mem
, size_t size
, void *context
)
21 return realloc(mem
, size
);
24 void *_libmemcached_calloc(const memcached_st
*ptr
, size_t nelem
, size_t size
, void *context
)
26 if (ptr
->allocators
.malloc
!= _libmemcached_malloc
)
28 void *ret
= _libmemcached_malloc(ptr
, nelem
* size
, context
);
30 memset(ret
, 0, nelem
* size
);
35 return calloc(nelem
, size
);
38 static const struct _allocators_st global_default_allocator
= {
39 .calloc
= _libmemcached_calloc
,
41 .free
= _libmemcached_free
,
42 .malloc
= _libmemcached_malloc
,
43 .realloc
= _libmemcached_realloc
46 struct _allocators_st
memcached_allocators_return_default(void)
48 return global_default_allocator
;
51 memcached_return_t
memcached_set_memory_allocators(memcached_st
*ptr
,
52 memcached_malloc_fn mem_malloc
,
53 memcached_free_fn mem_free
,
54 memcached_realloc_fn mem_realloc
,
55 memcached_calloc_fn mem_calloc
,
58 /* All should be set, or none should be set */
59 if (mem_malloc
== NULL
&& mem_free
== NULL
&& mem_realloc
== NULL
&& mem_calloc
== NULL
)
61 ptr
->allocators
= memcached_allocators_return_default();
63 else if (mem_malloc
== NULL
|| mem_free
== NULL
|| mem_realloc
== NULL
|| mem_calloc
== NULL
)
65 return MEMCACHED_FAILURE
;
69 ptr
->allocators
.malloc
= mem_malloc
;
70 ptr
->allocators
.free
= mem_free
;
71 ptr
->allocators
.realloc
= mem_realloc
;
72 ptr
->allocators
.calloc
= mem_calloc
;
73 ptr
->allocators
.context
= context
;
76 return MEMCACHED_SUCCESS
;
79 void *memcached_get_memory_allocators_context(const memcached_st
*ptr
)
81 return ptr
->allocators
.context
;
84 void memcached_get_memory_allocators(const memcached_st
*ptr
,
85 memcached_malloc_fn
*mem_malloc
,
86 memcached_free_fn
*mem_free
,
87 memcached_realloc_fn
*mem_realloc
,
88 memcached_calloc_fn
*mem_calloc
)
90 *mem_malloc
= ptr
->allocators
.malloc
;
91 *mem_free
= ptr
->allocators
.free
;
92 *mem_realloc
= ptr
->allocators
.realloc
;
93 *mem_calloc
= ptr
->allocators
.calloc
;