void _libmemcached_free(const memcached_st*, void *mem, void*)
{
- free(mem);
+ if (mem)
+ {
+ std::free(mem);
+ }
}
void *_libmemcached_malloc(const memcached_st *, size_t size, void *)
{
- return malloc(size);
+ return std::malloc(size);
}
void *_libmemcached_realloc(const memcached_st*, void *mem, size_t size, void *)
{
- return realloc(mem, size);
+ return std::realloc(mem, size);
}
void *_libmemcached_calloc(const memcached_st *self, size_t nelem, size_t size, void *context)
{
if (self->allocators.malloc != _libmemcached_malloc)
{
- void *ret = _libmemcached_malloc(self, nelem * size, context);
- if (not ret)
+ void *ret= _libmemcached_malloc(self, nelem * size, context);
+ if (ret)
+ {
memset(ret, 0, nelem * size);
+ }
return ret;
}
- return calloc(nelem, size);
+ return std::calloc(nelem, size);
}
struct memcached_allocator_t memcached_allocators_return_default(void)
return global_default_allocator;
}
-memcached_return_t memcached_set_memory_allocators(memcached_st *self,
+memcached_return_t memcached_set_memory_allocators(memcached_st *shell,
memcached_malloc_fn mem_malloc,
memcached_free_fn mem_free,
memcached_realloc_fn mem_realloc,
memcached_calloc_fn mem_calloc,
void *context)
{
+ Memcached* self= memcached2Memcached(shell);
+ if (self == NULL)
+ {
+ return MEMCACHED_INVALID_ARGUMENTS;
+ }
+
/* All should be set, or none should be set */
- if (mem_malloc == NULL && mem_free == NULL && mem_realloc == NULL && mem_calloc == NULL)
+ if (mem_malloc == NULL and mem_free == NULL and mem_realloc == NULL and mem_calloc == NULL)
{
self->allocators= memcached_allocators_return_default();
}
- else if (mem_malloc == NULL || mem_free == NULL || mem_realloc == NULL || mem_calloc == NULL)
+ else if (mem_malloc == NULL or mem_free == NULL or mem_realloc == NULL or mem_calloc == NULL)
{
- return MEMCACHED_FAILURE;
+ return memcached_set_error(*self, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("NULL parameter provided for one or more allocators"));
}
else
{
return MEMCACHED_SUCCESS;
}
-void *memcached_get_memory_allocators_context(const memcached_st *self)
+void *memcached_get_memory_allocators_context(const memcached_st *shell)
{
- return self->allocators.context;
+ const Memcached* self= memcached2Memcached(shell);
+ if (self)
+ {
+ return self->allocators.context;
+ }
+
+ return NULL;
}
-void memcached_get_memory_allocators(const memcached_st *self,
+void memcached_get_memory_allocators(const memcached_st *shell,
memcached_malloc_fn *mem_malloc,
memcached_free_fn *mem_free,
memcached_realloc_fn *mem_realloc,
memcached_calloc_fn *mem_calloc)
{
- *mem_malloc= self->allocators.malloc;
- *mem_free= self->allocators.free;
- *mem_realloc= self->allocators.realloc;
- *mem_calloc= self->allocators.calloc;
+ const Memcached* self= memcached2Memcached(shell);
+ if (self)
+ {
+ if (mem_malloc)
+ {
+ *mem_malloc= self->allocators.malloc;
+ }
+
+ if (mem_free)
+ {
+ *mem_free= self->allocators.free;
+ }
+
+ if (mem_realloc)
+ {
+ *mem_realloc= self->allocators.realloc;
+ }
+
+ if (mem_calloc)
+ {
+ *mem_calloc= self->allocators.calloc;
+ }
+ }
}