diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2013-02-27 14:27:58 -0800 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2013-02-27 14:28:38 -0800 |
commit | bb4becfbf3cdfa9e3b4320ce72fd7e7a57c34ad2 (patch) | |
tree | a6f4272eb53f4f7d5c1eb4c0e8cddf8071deeda8 /src | |
parent | e885f2d08fa4c8ba08a14b87ec20dd24806b5f6b (diff) | |
download | tmwa-bb4becfbf3cdfa9e3b4320ce72fd7e7a57c34ad2.tar.gz tmwa-bb4becfbf3cdfa9e3b4320ce72fd7e7a57c34ad2.tar.bz2 tmwa-bb4becfbf3cdfa9e3b4320ce72fd7e7a57c34ad2.tar.xz tmwa-bb4becfbf3cdfa9e3b4320ce72fd7e7a57c34ad2.zip |
Reimplement CREATE/RECREATE and allow NULL on size 0
Diffstat (limited to 'src')
-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); |