From bb4becfbf3cdfa9e3b4320ce72fd7e7a57c34ad2 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Wed, 27 Feb 2013 14:27:58 -0800 Subject: Reimplement CREATE/RECREATE and allow NULL on size 0 --- src/common/utils.hpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/common/utils.hpp') diff --git a/src/common/utils.hpp b/src/common/utils.hpp index 7ebd978..a9d0244 100644 --- a/src/common/utils.hpp +++ b/src/common/utils.hpp @@ -18,13 +18,32 @@ a{C,M,Re}alloc in common/malloc.{h,c}, and direct calls. I deleted malloc.{h,c} because it was redundant; future calls should either use this or depend on the coming segfault. */ +template +void create_impl(T *& result, size_t number) +{ + result = (T *)calloc(number, sizeof(T)); + if (!result && number) + { + perror("SYSERR: malloc failure"); + abort(); + } +} +template +void recreate_impl(T *& result, size_t number) +{ + result = (T *)realloc(result, sizeof(T) * number); + if (!result && number) + { + perror("SYSERR: realloc failure"); + abort(); + } +} + # define CREATE(result, type, number) \ - if (!((result) = (type *) calloc((number), sizeof(type)))) \ - { perror("SYSERR: malloc failure"); abort(); } else (void)0 + create_impl(result, number) # define RECREATE(result, type, number) \ - if (!((result) = (type *) realloc((result), sizeof(type) * (number))))\ - { perror("SYSERR: realloc failure"); abort(); } else (void)0 + recreate_impl(result, number) int remove_control_chars(char *str); int e_mail_check(const char *email); -- cgit v1.2.3-70-g09d2