| From f3e3e8fa703e88b76b22c5486277dfca3c85a24b Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| Date: Mon, 10 Apr 2017 14:56:18 -0700 |
| Subject: [PATCH] Declare the define visivility attribute together |
| |
| clang ignores the visibility attribute if its not |
| defined before the definition. As a result these |
| symbols become hidden and consumers of this library |
| fail to link due to these missing symbols |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| doxygen.cfg.in | 2 +- |
| src/internal.h | 5 ++--- |
| src/libnetfilter_acct.c | 41 ++++++++++++++--------------------------- |
| 3 files changed, 17 insertions(+), 31 deletions(-) |
| |
| diff --git a/doxygen.cfg.in b/doxygen.cfg.in |
| index 7f4bd04..fe64d48 100644 |
| --- a/doxygen.cfg.in |
| +++ b/doxygen.cfg.in |
| @@ -72,7 +72,7 @@ RECURSIVE = YES |
| EXCLUDE = |
| EXCLUDE_SYMLINKS = NO |
| EXCLUDE_PATTERNS = */.git/* .*.d |
| -EXCLUDE_SYMBOLS = EXPORT_SYMBOL nfacct |
| +EXCLUDE_SYMBOLS = nfacct |
| EXAMPLE_PATH = |
| EXAMPLE_PATTERNS = |
| EXAMPLE_RECURSIVE = NO |
| diff --git a/src/internal.h b/src/internal.h |
| index f0cc2e1..e5c5ffd 100644 |
| --- a/src/internal.h |
| +++ b/src/internal.h |
| @@ -3,10 +3,9 @@ |
| |
| #include "config.h" |
| #ifdef HAVE_VISIBILITY_HIDDEN |
| -# define __visible __attribute__((visibility("default"))) |
| -# define EXPORT_SYMBOL(x) typeof(x) (x) __visible |
| +# define __EXPORT __attribute__((visibility("default"))) |
| #else |
| -# define EXPORT_SYMBOL |
| +# define __EXPORT |
| #endif |
| |
| #include <endian.h> |
| diff --git a/src/libnetfilter_acct.c b/src/libnetfilter_acct.c |
| index b0bcf67..0220d14 100644 |
| --- a/src/libnetfilter_acct.c |
| +++ b/src/libnetfilter_acct.c |
| @@ -76,21 +76,19 @@ struct nfacct { |
| * In case of success, this function returns a valid pointer, otherwise NULL |
| * s returned and errno is appropriately set. |
| */ |
| -struct nfacct *nfacct_alloc(void) |
| +struct nfacct __EXPORT *nfacct_alloc(void) |
| { |
| return calloc(1, sizeof(struct nfacct)); |
| } |
| -EXPORT_SYMBOL(nfacct_alloc); |
| |
| /** |
| * nfacct_free - release one accounting object |
| * \param nfacct pointer to the accounting object |
| */ |
| -void nfacct_free(struct nfacct *nfacct) |
| +void __EXPORT nfacct_free(struct nfacct *nfacct) |
| { |
| free(nfacct); |
| } |
| -EXPORT_SYMBOL(nfacct_free); |
| |
| /** |
| * nfacct_attr_set - set one attribute of the accounting object |
| @@ -98,7 +96,7 @@ EXPORT_SYMBOL(nfacct_free); |
| * \param type attribute type you want to set |
| * \param data pointer to data that will be used to set this attribute |
| */ |
| -void |
| +void __EXPORT |
| nfacct_attr_set(struct nfacct *nfacct, enum nfacct_attr_type type, |
| const void *data) |
| { |
| @@ -126,7 +124,6 @@ nfacct_attr_set(struct nfacct *nfacct, enum nfacct_attr_type type, |
| break; |
| } |
| } |
| -EXPORT_SYMBOL(nfacct_attr_set); |
| |
| /** |
| * nfacct_attr_set_str - set one attribute the accounting object |
| @@ -134,13 +131,12 @@ EXPORT_SYMBOL(nfacct_attr_set); |
| * \param type attribute type you want to set |
| * \param name string that will be used to set this attribute |
| */ |
| -void |
| +void __EXPORT |
| nfacct_attr_set_str(struct nfacct *nfacct, enum nfacct_attr_type type, |
| const char *name) |
| { |
| nfacct_attr_set(nfacct, type, name); |
| } |
| -EXPORT_SYMBOL(nfacct_attr_set_str); |
| |
| /** |
| * nfacct_attr_set_u64 - set one attribute the accounting object |
| @@ -148,20 +144,19 @@ EXPORT_SYMBOL(nfacct_attr_set_str); |
| * \param type attribute type you want to set |
| * \param value unsigned 64-bits integer |
| */ |
| -void |
| +void __EXPORT |
| nfacct_attr_set_u64(struct nfacct *nfacct, enum nfacct_attr_type type, |
| uint64_t value) |
| { |
| nfacct_attr_set(nfacct, type, &value); |
| } |
| -EXPORT_SYMBOL(nfacct_attr_set_u64); |
| |
| /** |
| * nfacct_attr_unset - unset one attribute the accounting object |
| * \param nfacct pointer to the accounting object |
| * \param type attribute type you want to set |
| */ |
| -void |
| +void __EXPORT |
| nfacct_attr_unset(struct nfacct *nfacct, enum nfacct_attr_type type) |
| { |
| switch(type) { |
| @@ -182,7 +177,6 @@ nfacct_attr_unset(struct nfacct *nfacct, enum nfacct_attr_type type) |
| break; |
| } |
| } |
| -EXPORT_SYMBOL(nfacct_attr_unset); |
| |
| /** |
| * nfacct_attr_get - get one attribute the accounting object |
| @@ -192,7 +186,7 @@ EXPORT_SYMBOL(nfacct_attr_unset); |
| * This function returns a valid pointer to the attribute data. If a |
| * unsupported attribute is used, this returns NULL. |
| */ |
| -const void *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type) |
| +const void __EXPORT *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type) |
| { |
| const void *ret = NULL; |
| |
| @@ -220,7 +214,6 @@ const void *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type) |
| } |
| return ret; |
| } |
| -EXPORT_SYMBOL(nfacct_attr_get); |
| |
| /** |
| * nfacct_attr_get_str - get one attribute the accounting object |
| @@ -230,12 +223,11 @@ EXPORT_SYMBOL(nfacct_attr_get); |
| * This function returns a valid pointer to the beginning of the string. |
| * If the attribute is unsupported, this returns NULL. |
| */ |
| -const char * |
| +const char __EXPORT * |
| nfacct_attr_get_str(struct nfacct *nfacct, enum nfacct_attr_type type) |
| { |
| return nfacct_attr_get(nfacct, type); |
| } |
| -EXPORT_SYMBOL(nfacct_attr_get_str); |
| |
| /** |
| * nfacct_attr_get_u64 - get one attribute the accounting object |
| @@ -245,12 +237,11 @@ EXPORT_SYMBOL(nfacct_attr_get_str); |
| * This function returns a unsigned 64-bits integer. If the attribute is |
| * unsupported, this returns NULL. |
| */ |
| -uint64_t nfacct_attr_get_u64(struct nfacct *nfacct, enum nfacct_attr_type type) |
| +uint64_t __EXPORT nfacct_attr_get_u64(struct nfacct *nfacct, enum nfacct_attr_type type) |
| { |
| const void *ret = nfacct_attr_get(nfacct, type); |
| return ret ? *((uint64_t *)ret) : 0; |
| } |
| -EXPORT_SYMBOL(nfacct_attr_get_u64); |
| |
| static int |
| nfacct_snprintf_plain(char *buf, size_t rem, struct nfacct *nfacct, |
| @@ -424,8 +415,8 @@ err: |
| * This function returns -1 in case that some mandatory attributes are |
| * missing. On sucess, it returns 0. |
| */ |
| -int nfacct_snprintf(char *buf, size_t size, struct nfacct *nfacct, |
| - uint16_t type, uint16_t flags) |
| +int __EXPORT nfacct_snprintf(char *buf, size_t size, struct nfacct *nfacct, |
| + uint16_t type, uint16_t flags) |
| { |
| int ret = 0; |
| |
| @@ -445,7 +436,6 @@ int nfacct_snprintf(char *buf, size_t size, struct nfacct *nfacct, |
| } |
| return ret; |
| } |
| -EXPORT_SYMBOL(nfacct_snprintf); |
| |
| /** |
| * @} |
| @@ -484,7 +474,7 @@ EXPORT_SYMBOL(nfacct_snprintf); |
| * - Command NFNL_MSG_ACCT_DEL, to delete one specific nfacct object (if |
| * unused, otherwise you hit EBUSY). |
| */ |
| -struct nlmsghdr * |
| +struct nlmsghdr __EXPORT * |
| nfacct_nlmsg_build_hdr(char *buf, uint8_t cmd, uint16_t flags, uint32_t seq) |
| { |
| struct nlmsghdr *nlh; |
| @@ -502,14 +492,13 @@ nfacct_nlmsg_build_hdr(char *buf, uint8_t cmd, uint16_t flags, uint32_t seq) |
| |
| return nlh; |
| } |
| -EXPORT_SYMBOL(nfacct_nlmsg_build_hdr); |
| |
| /** |
| * nfacct_nlmsg_build_payload - build payload from accounting object |
| * \param nlh: netlink message that you want to use to add the payload. |
| * \param nfacct: pointer to a accounting object |
| */ |
| -void nfacct_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfacct *nfacct) |
| +void __EXPORT nfacct_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfacct *nfacct) |
| { |
| if (nfacct->bitset & (1 << NFACCT_ATTR_NAME)) |
| mnl_attr_put_strz(nlh, NFACCT_NAME, nfacct->name); |
| @@ -526,7 +515,6 @@ void nfacct_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfacct *nfacct) |
| if (nfacct->bitset & (1 << NFACCT_ATTR_QUOTA)) |
| mnl_attr_put_u64(nlh, NFACCT_QUOTA, htobe64(nfacct->quota)); |
| } |
| -EXPORT_SYMBOL(nfacct_nlmsg_build_payload); |
| |
| static int nfacct_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data) |
| { |
| @@ -563,7 +551,7 @@ static int nfacct_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data) |
| * This function returns -1 in case that some mandatory attributes are |
| * missing. On sucess, it returns 0. |
| */ |
| -int |
| +int __EXPORT |
| nfacct_nlmsg_parse_payload(const struct nlmsghdr *nlh, struct nfacct *nfacct) |
| { |
| struct nlattr *tb[NFACCT_MAX+1] = {}; |
| @@ -589,7 +577,6 @@ nfacct_nlmsg_parse_payload(const struct nlmsghdr *nlh, struct nfacct *nfacct) |
| |
| return 0; |
| } |
| -EXPORT_SYMBOL(nfacct_nlmsg_parse_payload); |
| |
| /** |
| * @} |
| -- |
| 2.12.2 |
| |