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 /* A wrapper around gcry_cipher_algo_name to return the string
"AES-128" instead of "AES". Given that we have an alias in "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 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(a,b) gcry_calloc ((a),(b))
#define xtrycalloc_secure(a,b) gcry_calloc_secure ((a),(b)) #define xtrycalloc_secure(a,b) gcry_calloc_secure ((a),(b))
#define xtryrealloc(a,b) gcry_realloc ((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 xtrystrdup(a) gcry_strdup ((a))
#define xfree(a) gcry_free ((a)) #define xfree(a) gcry_free ((a))
#define xfree_fnc gcry_free #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 xcalloc_secure(a,b) gcry_xcalloc_secure ((a),(b))
#define xrealloc(a,b) gcry_xrealloc ((a),(b)) #define xrealloc(a,b) gcry_xrealloc ((a),(b))
#define xstrdup(a) gcry_xstrdup ((a)) #define xstrdup(a) gcry_xstrdup ((a))
/* See also the xreallocarray prototype below. */
/* For compatibility with gpg 1.4 we also define these: */ /* For compatibility with gpg 1.4 we also define these: */
#define xmalloc_clear(a) gcry_xcalloc (1, (a)) #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. */ /* Print an out of core message and die. */
void xoutofcore (void); 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. */ /* Same as estream_asprintf but die on memory failure. */
char *xasprintf (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2); char *xasprintf (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2);
/* This is now an alias to estream_asprintf. */ /* This is now an alias to estream_asprintf. */