X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemory.h;h=06cc9985b27b8ea240b6b10507a22974fa87ff06;hb=4e38a2eadb390c100cbc8e73bf257c49f6eeb7d8;hp=7b30e3711314b5cd731ffab7cce81d8dbbed45c9;hpb=b16fffff43d822239ce79a366ec36873b0803df9;p=m6w6%2Flibmemcached diff --git a/libmemcached/memory.h b/libmemcached/memory.h index 7b30e371..06cc9985 100644 --- a/libmemcached/memory.h +++ b/libmemcached/memory.h @@ -36,22 +36,76 @@ #pragma once +#include + +#include + +#ifdef __cplusplus +#include +#include +#else +#include +#include +#endif + static inline void libmemcached_free(const memcached_st *self, void *mem) { - self->allocators.free(self, mem, self->allocators.context); + if (self) + { + self->allocators.free(self, mem, self->allocators.context); + } + else if (mem) + { +#ifdef __cplusplus + std::free(mem); +#else + free(mem); +#endif + } } static inline void *libmemcached_malloc(const memcached_st *self, const size_t size) { - return self->allocators.malloc(self, size, self->allocators.context); + if (self) + { + return self->allocators.malloc(self, size, self->allocators.context); + } + +#ifdef __cplusplus + return std::malloc(size); +#else + return malloc(size); +#endif } +#define libmemcached_xmalloc(__memcachd_st, __type) ((__type *)libmemcached_malloc((__memcachd_st), sizeof(__type))) -static inline void *libmemcached_realloc(const memcached_st *self, void *mem, const size_t size) +static inline void *libmemcached_realloc(const memcached_st *self, void *mem, size_t nmemb, const size_t size) { - return self->allocators.realloc(self, mem, size, self->allocators.context); + if (self) + { + return self->allocators.realloc(self, mem, nmemb * size, self->allocators.context); + } + +#ifdef __cplusplus + return std::realloc(mem, size); +#else + return realloc(mem, size); +#endif } +#define libmemcached_xrealloc(__memcachd_st, __mem, __nelem, __type) ((__type *)libmemcached_realloc((__memcachd_st), (__mem), (__nelem), sizeof(__type))) +#define libmemcached_xvalloc(__memcachd_st, __nelem, __type) ((__type *)libmemcached_realloc((__memcachd_st), NULL, (__nelem), sizeof(__type))) static inline void *libmemcached_calloc(const memcached_st *self, size_t nelem, size_t size) { - return self->allocators.calloc(self, nelem, size, self->allocators.context); + if (self) + { + return self->allocators.calloc(self, nelem, size, self->allocators.context); + } + +#ifdef __cplusplus + return std::calloc(nelem, size); +#else + return calloc(nelem, size); +#endif } +#define libmemcached_xcalloc(__memcachd_st, __nelem, __type) ((__type *)libmemcached_calloc((__memcachd_st), (__nelem), sizeof(__type)))