reftable: introduce `reftable_strdup()`
The reftable library provides the ability to swap out allocators. There is a gap here though, because we continue to use `xstrdup()` even in the case where all the other allocators have been swapped out. Introduce `reftable_strdup()` that uses `reftable_malloc()` to do the allocation. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
a5a15a4514
commit
7f0969febf
|
@ -43,6 +43,16 @@ void *reftable_calloc(size_t nelem, size_t elsize)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *reftable_strdup(const char *str)
|
||||||
|
{
|
||||||
|
size_t len = strlen(str);
|
||||||
|
char *result = reftable_malloc(len + 1);
|
||||||
|
if (!result)
|
||||||
|
return NULL;
|
||||||
|
memcpy(result, str, len + 1);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void reftable_set_alloc(void *(*malloc)(size_t),
|
void reftable_set_alloc(void *(*malloc)(size_t),
|
||||||
void *(*realloc)(void *, size_t), void (*free)(void *))
|
void *(*realloc)(void *, size_t), void (*free)(void *))
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,6 +54,7 @@ void *reftable_malloc(size_t sz);
|
||||||
void *reftable_realloc(void *p, size_t sz);
|
void *reftable_realloc(void *p, size_t sz);
|
||||||
void reftable_free(void *p);
|
void reftable_free(void *p);
|
||||||
void *reftable_calloc(size_t nelem, size_t elsize);
|
void *reftable_calloc(size_t nelem, size_t elsize);
|
||||||
|
char *reftable_strdup(const char *str);
|
||||||
|
|
||||||
#define REFTABLE_ALLOC_ARRAY(x, alloc) (x) = reftable_malloc(st_mult(sizeof(*(x)), (alloc)))
|
#define REFTABLE_ALLOC_ARRAY(x, alloc) (x) = reftable_malloc(st_mult(sizeof(*(x)), (alloc)))
|
||||||
#define REFTABLE_CALLOC_ARRAY(x, alloc) (x) = reftable_calloc((alloc), sizeof(*(x)))
|
#define REFTABLE_CALLOC_ARRAY(x, alloc) (x) = reftable_calloc((alloc), sizeof(*(x)))
|
||||||
|
|
Loading…
Reference in New Issue