Add no-fail equivalents of allocarray & reallocarray

v2: Remove extra 's' from comment

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Alan Coopersmith 2015-03-21 09:28:07 -07:00
parent c213b29d14
commit ae75d50395
2 changed files with 19 additions and 0 deletions

View File

@ -76,6 +76,8 @@ typedef struct _NewClientRec *NewClientPtr;
#define xnfstrdup(s) XNFstrdup(s)
#define xallocarray(num, size) reallocarray(NULL, (num), (size))
#define xnfallocarray(num, size) XNFreallocarray(NULL, (num), (size))
#define xnfreallocarray(ptr, num, size) XNFreallocarray((ptr), (num), (size))
#endif
#include <stdio.h>
@ -240,6 +242,13 @@ XNFcallocarray(size_t nmemb, size_t size);
extern _X_EXPORT void *
XNFrealloc(void * /*ptr */ , unsigned long /*amount */ );
/*
* This function reallocarray(3)s passed buffer, terminating the server if
* there is not enough memory or the arguments overflow when multiplied.
*/
extern _X_EXPORT void *
XNFreallocarray(void *ptr, size_t nmemb, size_t size);
/*
* This function strdup(3)s passed string. The only difference from the library
* function that it is safe to pass NULL, as NULL will be returned.

View File

@ -1158,6 +1158,16 @@ XNFrealloc(void *ptr, unsigned long amount)
return ret;
}
void *
XNFreallocarray(void *ptr, size_t nmemb, size_t size)
{
void *ret = reallocarray(ptr, nmemb, size);
if (!ret)
FatalError("XNFreallocarray: Out of memory");
return ret;
}
char *
Xstrdup(const char *s)
{