diff --git a/xmalloc.c b/xmalloc.c index 7322953a..ebac8a1d 100644 --- a/xmalloc.c +++ b/xmalloc.c @@ -42,12 +42,25 @@ xcalloc(size_t nmemb, size_t size) return check_alloc(calloc(nmemb, size)); } +void * +xrealloc(void *ptr, size_t size) +{ + void *alloc = realloc(ptr, size); + return unlikely(size == 0) ? alloc : check_alloc(alloc); +} + char * xstrdup(const char *str) { return check_alloc(strdup(str)); } +char * +xstrndup(const char *str, size_t n) +{ + return check_alloc(strndup(str, n)); +} + static VPRINTF(2) int xvasprintf_(char **strp, const char *format, va_list ap) { diff --git a/xmalloc.h b/xmalloc.h index 90d63031..2c12cf0a 100644 --- a/xmalloc.h +++ b/xmalloc.h @@ -5,5 +5,7 @@ void *xmalloc(size_t size) XMALLOC; void *xcalloc(size_t nmemb, size_t size) XMALLOC; +void *xrealloc(void *ptr, size_t size); char *xstrdup(const char *str) XSTRDUP; +char *xstrndup(const char *str, size_t n) XSTRDUP; char *xasprintf(const char *format, ...) PRINTF(1) XMALLOC;