From 1f8c8118f2d42f495dbe6e3adb2a95c87a92e8e0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 10 Sep 2021 20:11:45 -0400 Subject: Move attribute definitions to a separate header --- benchmark/dict_bench.c | 1 + benchmark/tree_bench.c | 1 + include/zix/attributes.h | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ include/zix/bitset.h | 2 +- include/zix/btree.h | 1 + include/zix/common.h | 52 ------------------------------- include/zix/digest.h | 2 +- include/zix/hash.h | 1 + include/zix/ring.h | 2 +- include/zix/tree.h | 1 + test/bitset_test.c | 2 +- test/hash_test.c | 1 + test/ring_test.c | 2 +- test/sem_test.c | 1 + test/test_malloc.h | 2 +- test/tree_test.c | 1 + 16 files changed, 95 insertions(+), 58 deletions(-) create mode 100644 include/zix/attributes.h diff --git a/benchmark/dict_bench.c b/benchmark/dict_bench.c index 62c1283..e1583f3 100644 --- a/benchmark/dict_bench.c +++ b/benchmark/dict_bench.c @@ -17,6 +17,7 @@ #include "bench.h" #include "warnings.h" +#include "zix/attributes.h" #include "zix/common.h" #include "zix/digest.h" #include "zix/hash.h" diff --git a/benchmark/tree_bench.c b/benchmark/tree_bench.c index 1be6767..72f1926 100644 --- a/benchmark/tree_bench.c +++ b/benchmark/tree_bench.c @@ -19,6 +19,7 @@ #include "../test/test_data.h" +#include "zix/attributes.h" #include "zix/btree.h" #include "zix/common.h" #include "zix/tree.h" diff --git a/include/zix/attributes.h b/include/zix/attributes.h new file mode 100644 index 0000000..c8f77c4 --- /dev/null +++ b/include/zix/attributes.h @@ -0,0 +1,81 @@ +/* + Copyright 2021 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_ATTRIBUTES_H +#define ZIX_ATTRIBUTES_H + +/** + @addtogroup zix + @{ +*/ + +// ZIX_API must be used to decorate things in the public API +#ifndef ZIX_API +# if defined(_WIN32) && !defined(ZIX_STATIC) && defined(ZIX_INTERNAL) +# define ZIX_API __declspec(dllexport) +# elif defined(_WIN32) && !defined(ZIX_STATIC) +# define ZIX_API __declspec(dllimport) +# elif defined(__GNUC__) +# define ZIX_API __attribute__((visibility("default"))) +# else +# define ZIX_API +# endif +#endif + +// GCC pure/const/malloc attributes +#ifdef __GNUC__ +# define ZIX_PURE_FUNC __attribute__((pure)) +# define ZIX_CONST_FUNC __attribute__((const)) +# define ZIX_MALLOC_FUNC __attribute__((malloc)) +#else +# define ZIX_PURE_FUNC +# define ZIX_CONST_FUNC +# define ZIX_MALLOC_FUNC +#endif + +#define ZIX_PURE_API \ + ZIX_API \ + ZIX_PURE_FUNC + +#define ZIX_CONST_API \ + ZIX_API \ + ZIX_CONST_FUNC + +#define ZIX_MALLOC_API \ + ZIX_API \ + ZIX_MALLOC_FUNC + +// Printf-like format functions +#ifdef __GNUC__ +# define ZIX_LOG_FUNC(fmt, arg1) __attribute__((format(printf, fmt, arg1))) +#else +# define ZIX_LOG_FUNC(fmt, arg1) +#endif + +// Unused parameter macro to suppresses warnings and make it impossible to use +#if defined(__cplusplus) +# define ZIX_UNUSED(name) +#elif defined(__GNUC__) +# define ZIX_UNUSED(name) name##_unused __attribute__((__unused__)) +#else +# define ZIX_UNUSED(name) name +#endif + +/** + @} +*/ + +#endif /* ZIX_ATTRIBUTES_H */ diff --git a/include/zix/bitset.h b/include/zix/bitset.h index 07f133f..ee8b805 100644 --- a/include/zix/bitset.h +++ b/include/zix/bitset.h @@ -17,7 +17,7 @@ #ifndef ZIX_BITSET_H #define ZIX_BITSET_H -#include "zix/common.h" +#include "zix/attributes.h" #include #include diff --git a/include/zix/btree.h b/include/zix/btree.h index 07de8c3..e2a5f26 100644 --- a/include/zix/btree.h +++ b/include/zix/btree.h @@ -17,6 +17,7 @@ #ifndef ZIX_BTREE_H #define ZIX_BTREE_H +#include "zix/attributes.h" #include "zix/common.h" #include diff --git a/include/zix/common.h b/include/zix/common.h index f43fcde..cfadb65 100644 --- a/include/zix/common.h +++ b/include/zix/common.h @@ -24,62 +24,10 @@ @{ */ -/** @cond */ -#ifndef ZIX_API -# if defined(_WIN32) && !defined(ZIX_STATIC) && defined(ZIX_INTERNAL) -# define ZIX_API __declspec(dllexport) -# elif defined(_WIN32) && !defined(ZIX_STATIC) -# define ZIX_API __declspec(dllimport) -# elif defined(__GNUC__) -# define ZIX_API __attribute__((visibility("default"))) -# else -# define ZIX_API -# endif -#endif - -#ifdef __GNUC__ -# define ZIX_PURE_FUNC __attribute__((pure)) -# define ZIX_CONST_FUNC __attribute__((const)) -# define ZIX_MALLOC_FUNC __attribute__((malloc)) -#else -# define ZIX_PURE_FUNC -# define ZIX_CONST_FUNC -# define ZIX_MALLOC_FUNC -#endif - -#define ZIX_PURE_API \ - ZIX_API \ - ZIX_PURE_FUNC - -#define ZIX_CONST_API \ - ZIX_API \ - ZIX_CONST_FUNC - -#define ZIX_MALLOC_API \ - ZIX_API \ - ZIX_MALLOC_FUNC - -/** @endcond */ - #ifdef __cplusplus extern "C" { #endif -#ifdef __GNUC__ -# define ZIX_LOG_FUNC(fmt, arg1) __attribute__((format(printf, fmt, arg1))) -#else -# define ZIX_LOG_FUNC(fmt, arg1) -#endif - -// Unused parameter macro to suppresses warnings and make it impossible to use -#if defined(__cplusplus) -# define ZIX_UNUSED(name) -#elif defined(__GNUC__) -# define ZIX_UNUSED(name) name##_unused __attribute__((__unused__)) -#else -# define ZIX_UNUSED(name) name -#endif - typedef enum { ZIX_STATUS_SUCCESS, ZIX_STATUS_ERROR, diff --git a/include/zix/digest.h b/include/zix/digest.h index 6df7002..139a0bd 100644 --- a/include/zix/digest.h +++ b/include/zix/digest.h @@ -17,7 +17,7 @@ #ifndef ZIX_DIGEST_H #define ZIX_DIGEST_H -#include "zix/common.h" +#include "zix/attributes.h" #include #include diff --git a/include/zix/hash.h b/include/zix/hash.h index f08d267..27fb39d 100644 --- a/include/zix/hash.h +++ b/include/zix/hash.h @@ -17,6 +17,7 @@ #ifndef ZIX_HASH_H #define ZIX_HASH_H +#include "zix/attributes.h" #include "zix/common.h" #include diff --git a/include/zix/ring.h b/include/zix/ring.h index 2650f07..69803bf 100644 --- a/include/zix/ring.h +++ b/include/zix/ring.h @@ -17,7 +17,7 @@ #ifndef ZIX_RING_H #define ZIX_RING_H -#include "zix/common.h" +#include "zix/attributes.h" #include diff --git a/include/zix/tree.h b/include/zix/tree.h index e0daa80..a6822e1 100644 --- a/include/zix/tree.h +++ b/include/zix/tree.h @@ -17,6 +17,7 @@ #ifndef ZIX_TREE_H #define ZIX_TREE_H +#include "zix/attributes.h" #include "zix/common.h" #include diff --git a/test/bitset_test.c b/test/bitset_test.c index 27f1d2d..c0833e7 100644 --- a/test/bitset_test.c +++ b/test/bitset_test.c @@ -14,8 +14,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "zix/attributes.h" #include "zix/bitset.h" -#include "zix/common.h" #include #include diff --git a/test/hash_test.c b/test/hash_test.c index 68556b0..834c391 100644 --- a/test/hash_test.c +++ b/test/hash_test.c @@ -22,6 +22,7 @@ #include "test_data.h" #include "test_malloc.h" +#include "zix/attributes.h" #include "zix/common.h" #include "zix/digest.h" #include "zix/hash.h" diff --git a/test/ring_test.c b/test/ring_test.c index c11d998..49cf4f0 100644 --- a/test/ring_test.c +++ b/test/ring_test.c @@ -14,7 +14,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "zix/common.h" +#include "zix/attributes.h" #include "zix/ring.h" #include "zix/thread.h" diff --git a/test/sem_test.c b/test/sem_test.c index 9a25e66..a5f6d2e 100644 --- a/test/sem_test.c +++ b/test/sem_test.c @@ -14,6 +14,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "zix/attributes.h" #include "zix/sem.h" #include "zix/thread.h" diff --git a/test/test_malloc.h b/test/test_malloc.h index 0d64e46..fdd2098 100644 --- a/test/test_malloc.h +++ b/test/test_malloc.h @@ -14,7 +14,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "zix/common.h" +#include "zix/attributes.h" #include diff --git a/test/tree_test.c b/test/tree_test.c index 434d4d7..76c247d 100644 --- a/test/tree_test.c +++ b/test/tree_test.c @@ -16,6 +16,7 @@ #include "test_data.h" +#include "zix/attributes.h" #include "zix/common.h" #include "zix/tree.h" -- cgit v1.2.1