mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-01 08:03:31 +01:00
Add reallocarray clone so we can stop doing multiply-then-reallocate
This commit is contained in:
parent
bb68c731b8
commit
19b137bc05
@ -244,6 +244,20 @@ tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to realloc <b>ptr</b> so that it takes up sz1 * sz2 bytes. Check for
|
||||||
|
* overflow. Unlike other allocation functions, return NULL on overflow.
|
||||||
|
*/
|
||||||
|
void *
|
||||||
|
tor_reallocarray_(void *ptr, size_t sz1, size_t sz2 DMALLOC_PARAMS)
|
||||||
|
{
|
||||||
|
/* XXXX we can make this return 0, but we would need to check all the
|
||||||
|
* reallocarray users. */
|
||||||
|
tor_assert(sz2 == 0 || sz1 < SIZE_T_CEILING / sz2);
|
||||||
|
|
||||||
|
return tor_realloc(ptr, (sz1 * sz2) DMALLOC_FN_ARGS);
|
||||||
|
}
|
||||||
|
|
||||||
/** Return a newly allocated copy of the NUL-terminated string s. On
|
/** Return a newly allocated copy of the NUL-terminated string s. On
|
||||||
* error, log and terminate. (Like strdup(s), but never returns
|
* error, log and terminate. (Like strdup(s), but never returns
|
||||||
* NULL.)
|
* NULL.)
|
||||||
|
@ -79,6 +79,7 @@ void *tor_malloc_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
|
|||||||
void *tor_malloc_zero_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
|
void *tor_malloc_zero_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
|
||||||
void *tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) ATTR_MALLOC;
|
void *tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) ATTR_MALLOC;
|
||||||
void *tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS);
|
void *tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS);
|
||||||
|
void *tor_reallocarray_(void *ptr, size_t size1, size_t size2 DMALLOC_PARAMS);
|
||||||
char *tor_strdup_(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1));
|
char *tor_strdup_(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1));
|
||||||
char *tor_strndup_(const char *s, size_t n DMALLOC_PARAMS)
|
char *tor_strndup_(const char *s, size_t n DMALLOC_PARAMS)
|
||||||
ATTR_MALLOC ATTR_NONNULL((1));
|
ATTR_MALLOC ATTR_NONNULL((1));
|
||||||
@ -116,6 +117,8 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
|
|||||||
#define tor_malloc_zero(size) tor_malloc_zero_(size DMALLOC_ARGS)
|
#define tor_malloc_zero(size) tor_malloc_zero_(size DMALLOC_ARGS)
|
||||||
#define tor_calloc(nmemb,size) tor_calloc_(nmemb, size DMALLOC_ARGS)
|
#define tor_calloc(nmemb,size) tor_calloc_(nmemb, size DMALLOC_ARGS)
|
||||||
#define tor_realloc(ptr, size) tor_realloc_(ptr, size DMALLOC_ARGS)
|
#define tor_realloc(ptr, size) tor_realloc_(ptr, size DMALLOC_ARGS)
|
||||||
|
#define tor_reallocarray(ptr, sz1, sz2) \
|
||||||
|
tor_reallocarray_((ptr), (sz1), (sz2) DMALLOC_ARGS)
|
||||||
#define tor_strdup(s) tor_strdup_(s DMALLOC_ARGS)
|
#define tor_strdup(s) tor_strdup_(s DMALLOC_ARGS)
|
||||||
#define tor_strndup(s, n) tor_strndup_(s, n DMALLOC_ARGS)
|
#define tor_strndup(s, n) tor_strndup_(s, n DMALLOC_ARGS)
|
||||||
#define tor_memdup(s, n) tor_memdup_(s, n DMALLOC_ARGS)
|
#define tor_memdup(s, n) tor_memdup_(s, n DMALLOC_ARGS)
|
||||||
|
Loading…
Reference in New Issue
Block a user