diff options
| -rw-r--r-- | README.md | 30 | ||||
| -rw-r--r-- | alloc.c | 30 | ||||
| -rw-r--r-- | alloc.h | 20 | ||||
| -rw-r--r-- | test.c | 9 | 
4 files changed, 60 insertions, 29 deletions
| @@ -500,6 +500,36 @@ if (redisInitiateSSLWithContext(c, ssl) != REDIS_OK) {  }  ``` +## Allocator injection + +Hiredis uses a pass-thru structure of function pointers defined in +[alloc.h](https://github.com/redis/hiredis/blob/f5d25850/alloc.h#L41) that conttain +the currently configured allocation and deallocation functions.  By default they +just point to libc (`malloc`, `calloc`, `realloc`, etc). + +### Overriding + +One can override the allocators like so: + +```c +hiredisAllocFuncs myfuncs = { +    .mallocFn = my_malloc, +    .callocFn = my_calloc, +    .reallocFn = my_realloc, +    .strdupFn = my_strdup, +    .freeFn = my_free, +}; + +// Override allocators (function returns current allocators if needed) +hiredisAllocFuncs orig = hiredisSetAllocators(&myfuncs); +``` + +To reset the allocators to their default libc function simply call: + +```c +hiredisResetAllocators(); +``` +  ## AUTHORS  Hiredis was written by Salvatore Sanfilippo (antirez at gmail) and @@ -34,11 +34,11 @@  #include <stdlib.h>  hiredisAllocFuncs hiredisAllocFns = { -    .malloc = malloc, -    .calloc = calloc, -    .realloc = realloc, -    .strdup = strdup, -    .free = free, +    .mallocFn = malloc, +    .callocFn = calloc, +    .reallocFn = realloc, +    .strdupFn = strdup, +    .freeFn = free,  };  /* Override hiredis' allocators with ones supplied by the user */ @@ -53,34 +53,34 @@ hiredisAllocFuncs hiredisSetAllocators(hiredisAllocFuncs *override) {  /* Reset allocators to use libc defaults */  void hiredisResetAllocators(void) {      hiredisAllocFns = (hiredisAllocFuncs) { -        .malloc = malloc, -        .calloc = calloc, -        .realloc = realloc, -        .strdup = strdup, -        .free = free, +        .mallocFn = malloc, +        .callocFn = calloc, +        .reallocFn = realloc, +        .strdupFn = strdup, +        .freeFn = free,      };  }  #ifdef _WIN32  void *hi_malloc(size_t size) { -    return hiredisAllocFns.malloc(size); +    return hiredisAllocFns.mallocFn(size);  }  void *hi_calloc(size_t nmemb, size_t size) { -    return hiredisAllocFns.calloc(nmemb, size); +    return hiredisAllocFns.callocFn(nmemb, size);  }  void *hi_realloc(void *ptr, size_t size) { -    return hiredisAllocFns.realloc(ptr, size); +    return hiredisAllocFns.reallocFn(ptr, size);  }  char *hi_strdup(const char *str) { -    return hiredisAllocFns.strdup(str); +    return hiredisAllocFns.strdupFn(str);  }  void hi_free(void *ptr) { -    hiredisAllocFns.free(ptr); +    hiredisAllocFns.freeFn(ptr);  }  #endif @@ -39,11 +39,11 @@ extern "C" {  /* Structure pointing to our actually configured allocators */  typedef struct hiredisAllocFuncs { -    void *(*malloc)(size_t); -    void *(*calloc)(size_t,size_t); -    void *(*realloc)(void*,size_t); -    char *(*strdup)(const char*); -    void (*free)(void*); +    void *(*mallocFn)(size_t); +    void *(*callocFn)(size_t,size_t); +    void *(*reallocFn)(void*,size_t); +    char *(*strdupFn)(const char*); +    void (*freeFn)(void*);  } hiredisAllocFuncs;  hiredisAllocFuncs hiredisSetAllocators(hiredisAllocFuncs *ha); @@ -55,23 +55,23 @@ void hiredisResetAllocators(void);  extern hiredisAllocFuncs hiredisAllocFns;  static inline void *hi_malloc(size_t size) { -    return hiredisAllocFns.malloc(size); +    return hiredisAllocFns.mallocFn(size);  }  static inline void *hi_calloc(size_t nmemb, size_t size) { -    return hiredisAllocFns.calloc(nmemb, size); +    return hiredisAllocFns.callocFn(nmemb, size);  }  static inline void *hi_realloc(void *ptr, size_t size) { -    return hiredisAllocFns.realloc(ptr, size); +    return hiredisAllocFns.reallocFn(ptr, size);  }  static inline char *hi_strdup(const char *str) { -    return hiredisAllocFns.strdup(str); +    return hiredisAllocFns.strdupFn(str);  }  static inline void hi_free(void *ptr) { -    hiredisAllocFns.free(ptr); +    hiredisAllocFns.freeFn(ptr);  }  #else @@ -550,10 +550,11 @@ static void *hi_realloc_fail(void *ptr, size_t size) {  static void test_allocator_injection(void) {      hiredisAllocFuncs ha = { -        .malloc = hi_malloc_fail, -        .calloc = hi_calloc_fail, -        .realloc = hi_realloc_fail, -        .free = NULL, +        .mallocFn = hi_malloc_fail, +        .callocFn = hi_calloc_fail, +        .reallocFn = hi_realloc_fail, +        .strdupFn = strdup, +        .freeFn = free,      };      // Override hiredis allocators | 
