|  | /* | 
|  | Copyright 2020 Google LLC | 
|  |  | 
|  | Use of this source code is governed by a BSD-style | 
|  | license that can be found in the LICENSE file or at | 
|  | https://developers.google.com/open-source/licenses/bsd | 
|  | */ | 
|  |  | 
|  | #include "system.h" | 
|  | #include "reftable-malloc.h" | 
|  |  | 
|  | #include "basics.h" | 
|  |  | 
|  | static void *(*reftable_malloc_ptr)(size_t sz); | 
|  | static void *(*reftable_realloc_ptr)(void *, size_t); | 
|  | static void (*reftable_free_ptr)(void *); | 
|  |  | 
|  | void *reftable_malloc(size_t sz) | 
|  | { | 
|  | if (reftable_malloc_ptr) | 
|  | return (*reftable_malloc_ptr)(sz); | 
|  | return malloc(sz); | 
|  | } | 
|  |  | 
|  | void *reftable_realloc(void *p, size_t sz) | 
|  | { | 
|  | if (reftable_realloc_ptr) | 
|  | return (*reftable_realloc_ptr)(p, sz); | 
|  | return realloc(p, sz); | 
|  | } | 
|  |  | 
|  | void reftable_free(void *p) | 
|  | { | 
|  | if (reftable_free_ptr) | 
|  | reftable_free_ptr(p); | 
|  | else | 
|  | free(p); | 
|  | } | 
|  |  | 
|  | void *reftable_calloc(size_t nelem, size_t elsize) | 
|  | { | 
|  | size_t sz = st_mult(nelem, elsize); | 
|  | void *p = reftable_malloc(sz); | 
|  | memset(p, 0, sz); | 
|  | return p; | 
|  | } | 
|  |  | 
|  | void reftable_set_alloc(void *(*malloc)(size_t), | 
|  | void *(*realloc)(void *, size_t), void (*free)(void *)) | 
|  | { | 
|  | reftable_malloc_ptr = malloc; | 
|  | reftable_realloc_ptr = realloc; | 
|  | reftable_free_ptr = free; | 
|  | } | 
|  |  | 
|  | int hash_size(uint32_t id) | 
|  | { | 
|  | switch (id) { | 
|  | case 0: | 
|  | case GIT_SHA1_FORMAT_ID: | 
|  | return GIT_SHA1_RAWSZ; | 
|  | case GIT_SHA256_FORMAT_ID: | 
|  | return GIT_SHA256_RAWSZ; | 
|  | } | 
|  | abort(); | 
|  | } |