diff options
Diffstat (limited to 'src/common/utils.hpp')
-rw-r--r-- | src/common/utils.hpp | 27 |
1 files changed, 23 insertions, 4 deletions
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<class T> +void create_impl(T *& result, size_t number) +{ + result = (T *)calloc(number, sizeof(T)); + if (!result && number) + { + perror("SYSERR: malloc failure"); + abort(); + } +} +template<class T> +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<type>(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<type>(result, number) int remove_control_chars(char *str); int e_mail_check(const char *email); |