macros to create usual functions : new/delete and init/wipe.
authorPierre Habouzit <madcoder@debian.org>
Wed, 1 Nov 2006 23:20:25 +0000 (00:20 +0100)
committerPierre Habouzit <madcoder@debian.org>
Wed, 1 Nov 2006 23:20:25 +0000 (00:20 +0100)
we will use __attribute__ so add the define so that it compiles on other
compilers well

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
lib-lib/macros.h
lib-lib/mem.h

index 1867d7b..75c734a 100644 (file)
 #ifndef MUTT_LIB_LIB_MACROS_H
 #define MUTT_LIB_LIB_MACROS_H
 
 #ifndef MUTT_LIB_LIB_MACROS_H
 #define MUTT_LIB_LIB_MACROS_H
 
+#ifndef __GNUC__
+#  define __attribute__(a)
+#endif
+
 /*
  * config.h must be included by source file!
  */
 /*
  * config.h must be included by source file!
  */
index a405e30..db5ef49 100644 (file)
@@ -86,4 +86,26 @@ static inline void *xmemdupstr(const void *src, ssize_t len) {
     return res;
 }
 
     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 */
 #endif /* MUTT_LIB_LIB_MEM_H */