summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/utils.hpp27
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);