summaryrefslogtreecommitdiff
path: root/defer.h
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-02-06 14:06:18 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-02-06 14:06:18 +0300
commitd4e26c1d59f7e69bd71c92b93c033e197a38a782 (patch)
treeee5344314fbb8a0189c1be26d8f93ffbbbf65678 /defer.h
init
Diffstat (limited to 'defer.h')
-rw-r--r--defer.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/defer.h b/defer.h
new file mode 100644
index 0000000..91e45a2
--- /dev/null
+++ b/defer.h
@@ -0,0 +1,20 @@
+#ifndef __DEFER_H__
+#define __DEFER_H__
+
+#ifndef __unused
+#define __unused __attribute__((unused))
+#endif
+
+#define __cleanup(f) __attribute__((cleanup(f)))
+
+#define CAT(a, b) CAT_(a, b)
+#define CAT_(a, b) a ## b
+
+#define UNIQ(name) CAT(name, __LINE__)
+
+#define defer \
+ auto void UNIQ(defer_func)(int *); \
+ int UNIQ(defer_var) __cleanup(UNIQ(defer_func)); \
+ void UNIQ(defer_func)(int *__arg __unused)
+
+#endif