Annotation of win32/redis/include/hiredis/alloc.h, revision 1.1
1.1 ! moko 1: /*
! 2: * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>
! 3: *
! 4: * All rights reserved.
! 5: *
! 6: * Redistribution and use in source and binary forms, with or without
! 7: * modification, are permitted provided that the following conditions are met:
! 8: *
! 9: * * Redistributions of source code must retain the above copyright notice,
! 10: * this list of conditions and the following disclaimer.
! 11: * * Redistributions in binary form must reproduce the above copyright
! 12: * notice, this list of conditions and the following disclaimer in the
! 13: * documentation and/or other materials provided with the distribution.
! 14: * * Neither the name of Redis nor the names of its contributors may be used
! 15: * to endorse or promote products derived from this software without
! 16: * specific prior written permission.
! 17: *
! 18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
! 19: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 20: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 21: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
! 22: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 23: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 24: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 25: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 26: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 27: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! 28: * POSSIBILITY OF SUCH DAMAGE.
! 29: */
! 30:
! 31: #ifndef HIREDIS_ALLOC_H
! 32: #define HIREDIS_ALLOC_H
! 33:
! 34: #include <stddef.h> /* for size_t */
! 35: #include <stdint.h>
! 36:
! 37: #ifdef __cplusplus
! 38: extern "C" {
! 39: #endif
! 40:
! 41: /* Structure pointing to our actually configured allocators */
! 42: typedef struct hiredisAllocFuncs {
! 43: void *(*mallocFn)(size_t);
! 44: void *(*callocFn)(size_t,size_t);
! 45: void *(*reallocFn)(void*,size_t);
! 46: char *(*strdupFn)(const char*);
! 47: void (*freeFn)(void*);
! 48: } hiredisAllocFuncs;
! 49:
! 50: hiredisAllocFuncs hiredisSetAllocators(hiredisAllocFuncs *ha);
! 51: void hiredisResetAllocators(void);
! 52:
! 53: #ifndef _WIN32
! 54:
! 55: /* Hiredis' configured allocator function pointer struct */
! 56: extern hiredisAllocFuncs hiredisAllocFns;
! 57:
! 58: static inline void *hi_malloc(size_t size) {
! 59: return hiredisAllocFns.mallocFn(size);
! 60: }
! 61:
! 62: static inline void *hi_calloc(size_t nmemb, size_t size) {
! 63: /* Overflow check as the user can specify any arbitrary allocator */
! 64: if (SIZE_MAX / size < nmemb)
! 65: return NULL;
! 66:
! 67: return hiredisAllocFns.callocFn(nmemb, size);
! 68: }
! 69:
! 70: static inline void *hi_realloc(void *ptr, size_t size) {
! 71: return hiredisAllocFns.reallocFn(ptr, size);
! 72: }
! 73:
! 74: static inline char *hi_strdup(const char *str) {
! 75: return hiredisAllocFns.strdupFn(str);
! 76: }
! 77:
! 78: static inline void hi_free(void *ptr) {
! 79: hiredisAllocFns.freeFn(ptr);
! 80: }
! 81:
! 82: #else
! 83:
! 84: void *hi_malloc(size_t size);
! 85: void *hi_calloc(size_t nmemb, size_t size);
! 86: void *hi_realloc(void *ptr, size_t size);
! 87: char *hi_strdup(const char *str);
! 88: void hi_free(void *ptr);
! 89:
! 90: #endif
! 91:
! 92: #ifdef __cplusplus
! 93: }
! 94: #endif
! 95:
! 96: #endif /* HIREDIS_ALLOC_H */
E-mail: