Add LIBMEMCACHED_API for exist.
[m6w6/libmemcached] / libmemcached / allocators.cc
index d0d9e57e8659dfdd0e333ad24e310a128be1d18a..98c87591a53615e496babd67c4b605dd4e4449e6 100644 (file)
 
 void _libmemcached_free(const memcached_st*, void *mem, void*)
 {
-  free(mem);
+  if (mem)
+  {
+    free(mem);
+  }
 }
 
 void *_libmemcached_malloc(const memcached_st *, size_t size, void *)
@@ -57,8 +60,10 @@ void *_libmemcached_calloc(const memcached_st *self, size_t nelem, size_t size,
   if (self->allocators.malloc != _libmemcached_malloc)
   {
      void *ret = _libmemcached_malloc(self, nelem * size, context);
-     if (not ret)
+     if (ret == NULL)
+     {
        memset(ret, 0, nelem * size);
+     }
 
      return ret;
   }
@@ -79,14 +84,19 @@ memcached_return_t memcached_set_memory_allocators(memcached_st *self,
                                                    memcached_calloc_fn mem_calloc,
                                                    void *context)
 {
+  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
   {
@@ -111,6 +121,11 @@ void memcached_get_memory_allocators(const memcached_st *self,
                                      memcached_realloc_fn *mem_realloc,
                                      memcached_calloc_fn *mem_calloc)
 {
+  if (self == NULL)
+  {
+    return;
+  }
+
   *mem_malloc= self->allocators.malloc;
   *mem_free= self->allocators.free;
   *mem_realloc= self->allocators.realloc;