common: Add xreallocarray function.

* common/miscellaneous.c (xreallocarray): New func.
* common/util.h (xtryreallocarray): New macro.
--

Very useful to match calloc behaviour.

Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2020-03-04 13:55:53 +01:00
parent 178b3772ff
commit 6fa1808cb7
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 19 additions and 0 deletions

View File

@ -117,6 +117,17 @@ xoutofcore (void)
}
/* Wrapper around gpgrt_reallocarray. */
void *
xreallocarray (void *a, size_t oldnmemb, size_t nmemb, size_t size)
{
void *p = gpgrt_reallocarray (a, oldnmemb, nmemb, size);
if (!p)
xoutofcore ();
return p;
}
/* A wrapper around gcry_cipher_algo_name to return the string
"AES-128" instead of "AES". Given that we have an alias in
libgcrypt for it, it does not harm to too much to return this other

View File

@ -99,6 +99,7 @@ typedef char **rl_completion_func_t (const char *, int, int);
#define xtrycalloc(a,b) gcry_calloc ((a),(b))
#define xtrycalloc_secure(a,b) gcry_calloc_secure ((a),(b))
#define xtryrealloc(a,b) gcry_realloc ((a),(b))
#define xtryreallocarray(a,b,c,d) gpgrt_reallocarray ((a),(b),(c),(d))
#define xtrystrdup(a) gcry_strdup ((a))
#define xfree(a) gcry_free ((a))
#define xfree_fnc gcry_free
@ -109,6 +110,7 @@ typedef char **rl_completion_func_t (const char *, int, int);
#define xcalloc_secure(a,b) gcry_xcalloc_secure ((a),(b))
#define xrealloc(a,b) gcry_xrealloc ((a),(b))
#define xstrdup(a) gcry_xstrdup ((a))
/* See also the xreallocarray prototype below. */
/* For compatibility with gpg 1.4 we also define these: */
#define xmalloc_clear(a) gcry_xcalloc (1, (a))
@ -306,6 +308,12 @@ void setup_libgcrypt_logging (void);
/* Print an out of core message and die. */
void xoutofcore (void);
/* Wrapper aroung gpgrt_reallocarray. Uses the gpgrt alloc function
* which are redirect to the Libgcrypt versions via
* init_common_subsystems. Thus they can be used interchangeable with
* the other alloc functions. */
void *xreallocarray (void *a, size_t oldnmemb, size_t nmemb, size_t size);
/* Same as estream_asprintf but die on memory failure. */
char *xasprintf (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2);
/* This is now an alias to estream_asprintf. */