X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lib%2Fmem.h;h=ca9712b5db4dad64c01e4d10ece0a5a66bad35fa;hp=a405e306180deaf30fb0686a6e6129ff79381b94;hb=92c3d4c767ddbc0e0c64dd6e132ce10627550580;hpb=d4483b5add8d25008c305b51729f4a53bccfaab8 diff --git a/lib-lib/mem.h b/lib-lib/mem.h index a405e30..ca9712b 100644 --- a/lib-lib/mem.h +++ b/lib-lib/mem.h @@ -20,9 +20,8 @@ #ifndef MUTT_LIB_LIB_MEM_H #define MUTT_LIB_LIB_MEM_H -#include -#include -#include +#define ssizeof(foo) (ssize_t)sizeof(foo) +#define countof(foo) (ssizeof(foo) / ssizeof(foo[0])) #define p_new(type, count) ((type *)xmalloc(sizeof(type) * (count))) #define p_clear(p, count) ((void)memset((p), 0, sizeof(*(p)) * (count))) @@ -86,4 +85,26 @@ static inline void *xmemdupstr(const void *src, ssize_t len) { return res; } + +#define DO_INIT(type, prefix) \ + static inline type * prefix##_init(type *var) { \ + p_clear(var, 1); \ + return var; \ + } +#define DO_WIPE(type, prefix) \ + static inline void prefix##_wipe(type *var __attribute__((unused))) { } + +#define DO_NEW(type, prefix) \ + static inline type * prefix##_new(void) { \ + return prefix##_init(p_new(type, 1)); \ + } +#define DO_DELETE(type, prefix) \ + static inline void __attribute__((nonnull)) \ + prefix##_delete(type **var) { \ + if (*var) { \ + prefix##_wipe(*var); \ + p_delete(var); \ + } \ + } + #endif /* MUTT_LIB_LIB_MEM_H */