From 7966020bdf0135b7d5c4c792883875019ae2a906 Mon Sep 17 00:00:00 2001 From: Armin K Date: Sat, 23 Dec 2017 21:12:04 +0100 Subject: src: Fix exporting symbols with clang When EXPORT_SYMBOL is located after function definition, clang won't properly export the function, resulting in a library with no symbols when built with clang. Based on libmnl commit dcdb47373a37 ("Move declaration of visibility attributes before definition.") Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1205 Signed-off-by: Armin K Signed-off-by: Pablo Neira Ayuso --- src/chain.c | 68 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) (limited to 'src/chain.c') diff --git a/src/chain.c b/src/chain.c index a11bcf5..eff5186 100644 --- a/src/chain.c +++ b/src/chain.c @@ -87,12 +87,13 @@ static const char *nftnl_hooknum2str(int family, int hooknum) return "unknown"; } +EXPORT_SYMBOL(nftnl_chain_alloc); struct nftnl_chain *nftnl_chain_alloc(void) { return calloc(1, sizeof(struct nftnl_chain)); } -EXPORT_SYMBOL(nftnl_chain_alloc); +EXPORT_SYMBOL(nftnl_chain_free); void nftnl_chain_free(const struct nftnl_chain *c) { if (c->flags & (1 << NFTNL_CHAIN_NAME)) @@ -105,14 +106,14 @@ void nftnl_chain_free(const struct nftnl_chain *c) xfree(c->dev); xfree(c); } -EXPORT_SYMBOL(nftnl_chain_free); +EXPORT_SYMBOL(nftnl_chain_is_set); bool nftnl_chain_is_set(const struct nftnl_chain *c, uint16_t attr) { return c->flags & (1 << attr); } -EXPORT_SYMBOL(nftnl_chain_is_set); +EXPORT_SYMBOL(nftnl_chain_unset); void nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr) { if (!(c->flags & (1 << attr))) @@ -147,7 +148,6 @@ void nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr) c->flags &= ~(1 << attr); } -EXPORT_SYMBOL(nftnl_chain_unset); static uint32_t nftnl_chain_validate[NFTNL_CHAIN_MAX + 1] = { [NFTNL_CHAIN_HOOKNUM] = sizeof(uint32_t), @@ -159,6 +159,7 @@ static uint32_t nftnl_chain_validate[NFTNL_CHAIN_MAX + 1] = { [NFTNL_CHAIN_FAMILY] = sizeof(uint32_t), }; +EXPORT_SYMBOL(nftnl_chain_set_data); int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr, const void *data, uint32_t data_len) { @@ -226,44 +227,44 @@ int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr, c->flags |= (1 << attr); return 0; } -EXPORT_SYMBOL(nftnl_chain_set_data); +EXPORT_SYMBOL(nftnl_chain_set); void nftnl_chain_set(struct nftnl_chain *c, uint16_t attr, const void *data) { nftnl_chain_set_data(c, attr, data, nftnl_chain_validate[attr]); } -EXPORT_SYMBOL(nftnl_chain_set); +EXPORT_SYMBOL(nftnl_chain_set_u32); void nftnl_chain_set_u32(struct nftnl_chain *c, uint16_t attr, uint32_t data) { nftnl_chain_set_data(c, attr, &data, sizeof(uint32_t)); } -EXPORT_SYMBOL(nftnl_chain_set_u32); +EXPORT_SYMBOL(nftnl_chain_set_s32); void nftnl_chain_set_s32(struct nftnl_chain *c, uint16_t attr, int32_t data) { nftnl_chain_set_data(c, attr, &data, sizeof(int32_t)); } -EXPORT_SYMBOL(nftnl_chain_set_s32); +EXPORT_SYMBOL(nftnl_chain_set_u64); void nftnl_chain_set_u64(struct nftnl_chain *c, uint16_t attr, uint64_t data) { nftnl_chain_set_data(c, attr, &data, sizeof(uint64_t)); } -EXPORT_SYMBOL(nftnl_chain_set_u64); +EXPORT_SYMBOL(nftnl_chain_set_u8); void nftnl_chain_set_u8(struct nftnl_chain *c, uint16_t attr, uint8_t data) { nftnl_chain_set_data(c, attr, &data, sizeof(uint8_t)); } -EXPORT_SYMBOL(nftnl_chain_set_u8); +EXPORT_SYMBOL(nftnl_chain_set_str); int nftnl_chain_set_str(struct nftnl_chain *c, uint16_t attr, const char *str) { return nftnl_chain_set_data(c, attr, str, strlen(str) + 1); } -EXPORT_SYMBOL(nftnl_chain_set_str); +EXPORT_SYMBOL(nftnl_chain_get_data); const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr, uint32_t *data_len) { @@ -310,21 +311,21 @@ const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr, } return NULL; } -EXPORT_SYMBOL(nftnl_chain_get_data); +EXPORT_SYMBOL(nftnl_chain_get); const void *nftnl_chain_get(const struct nftnl_chain *c, uint16_t attr) { uint32_t data_len; return nftnl_chain_get_data(c, attr, &data_len); } -EXPORT_SYMBOL(nftnl_chain_get); +EXPORT_SYMBOL(nftnl_chain_get_str); const char *nftnl_chain_get_str(const struct nftnl_chain *c, uint16_t attr) { return nftnl_chain_get(c, attr); } -EXPORT_SYMBOL(nftnl_chain_get_str); +EXPORT_SYMBOL(nftnl_chain_get_u32); uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr) { uint32_t data_len; @@ -334,8 +335,8 @@ uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr) return val ? *val : 0; } -EXPORT_SYMBOL(nftnl_chain_get_u32); +EXPORT_SYMBOL(nftnl_chain_get_s32); int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr) { uint32_t data_len; @@ -345,8 +346,8 @@ int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr) return val ? *val : 0; } -EXPORT_SYMBOL(nftnl_chain_get_s32); +EXPORT_SYMBOL(nftnl_chain_get_u64); uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr) { uint32_t data_len; @@ -356,8 +357,8 @@ uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr) return val ? *val : 0; } -EXPORT_SYMBOL(nftnl_chain_get_u64); +EXPORT_SYMBOL(nftnl_chain_get_u8); uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr) { uint32_t data_len; @@ -367,8 +368,8 @@ uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr) return val ? *val : 0; } -EXPORT_SYMBOL(nftnl_chain_get_u8); +EXPORT_SYMBOL(nftnl_chain_nlmsg_build_payload); void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_chain *c) { if (c->flags & (1 << NFTNL_CHAIN_TABLE)) @@ -404,7 +405,6 @@ void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_ch if (c->flags & (1 << NFTNL_CHAIN_TYPE)) mnl_attr_put_strz(nlh, NFTA_CHAIN_TYPE, c->type); } -EXPORT_SYMBOL(nftnl_chain_nlmsg_build_payload); static int nftnl_chain_parse_attr_cb(const struct nlattr *attr, void *data) { @@ -529,6 +529,7 @@ static int nftnl_chain_parse_hook(struct nlattr *attr, struct nftnl_chain *c) return 0; } +EXPORT_SYMBOL(nftnl_chain_nlmsg_parse); int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c) { struct nlattr *tb[NFTA_CHAIN_MAX+1] = {}; @@ -590,7 +591,6 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c) return ret; } -EXPORT_SYMBOL(nftnl_chain_nlmsg_parse); static inline int nftnl_str2hooknum(int family, const char *hook) { @@ -732,19 +732,19 @@ static int nftnl_chain_do_parse(struct nftnl_chain *c, enum nftnl_parse_type typ return ret; } +EXPORT_SYMBOL(nftnl_chain_parse); int nftnl_chain_parse(struct nftnl_chain *c, enum nftnl_parse_type type, const char *data, struct nftnl_parse_err *err) { return nftnl_chain_do_parse(c, type, data, err, NFTNL_PARSE_BUFFER); } -EXPORT_SYMBOL(nftnl_chain_parse); +EXPORT_SYMBOL(nftnl_chain_parse_file); int nftnl_chain_parse_file(struct nftnl_chain *c, enum nftnl_parse_type type, FILE *fp, struct nftnl_parse_err *err) { return nftnl_chain_do_parse(c, type, fp, err, NFTNL_PARSE_FILE); } -EXPORT_SYMBOL(nftnl_chain_parse_file); static int nftnl_chain_export(char *buf, size_t size, const struct nftnl_chain *c, int type) @@ -850,6 +850,7 @@ static int nftnl_chain_cmd_snprintf(char *buf, size_t size, return offset; } +EXPORT_SYMBOL(nftnl_chain_snprintf); int nftnl_chain_snprintf(char *buf, size_t size, const struct nftnl_chain *c, uint32_t type, uint32_t flags) { @@ -859,7 +860,6 @@ int nftnl_chain_snprintf(char *buf, size_t size, const struct nftnl_chain *c, return nftnl_chain_cmd_snprintf(buf, size, c, nftnl_flag2cmd(flags), type, flags); } -EXPORT_SYMBOL(nftnl_chain_snprintf); static int nftnl_chain_do_snprintf(char *buf, size_t size, const void *c, uint32_t cmd, uint32_t type, uint32_t flags) @@ -867,18 +867,19 @@ static int nftnl_chain_do_snprintf(char *buf, size_t size, const void *c, return nftnl_chain_snprintf(buf, size, c, type, flags); } +EXPORT_SYMBOL(nftnl_chain_fprintf); int nftnl_chain_fprintf(FILE *fp, const struct nftnl_chain *c, uint32_t type, uint32_t flags) { return nftnl_fprintf(fp, c, NFTNL_CMD_UNSPEC, type, flags, nftnl_chain_do_snprintf); } -EXPORT_SYMBOL(nftnl_chain_fprintf); struct nftnl_chain_list { struct list_head list; }; +EXPORT_SYMBOL(nftnl_chain_list_alloc); struct nftnl_chain_list *nftnl_chain_list_alloc(void) { struct nftnl_chain_list *list; @@ -891,8 +892,8 @@ struct nftnl_chain_list *nftnl_chain_list_alloc(void) return list; } -EXPORT_SYMBOL(nftnl_chain_list_alloc); +EXPORT_SYMBOL(nftnl_chain_list_free); void nftnl_chain_list_free(struct nftnl_chain_list *list) { struct nftnl_chain *r, *tmp; @@ -903,32 +904,32 @@ void nftnl_chain_list_free(struct nftnl_chain_list *list) } xfree(list); } -EXPORT_SYMBOL(nftnl_chain_list_free); +EXPORT_SYMBOL(nftnl_chain_list_is_empty); int nftnl_chain_list_is_empty(const struct nftnl_chain_list *list) { return list_empty(&list->list); } -EXPORT_SYMBOL(nftnl_chain_list_is_empty); +EXPORT_SYMBOL(nftnl_chain_list_add); void nftnl_chain_list_add(struct nftnl_chain *r, struct nftnl_chain_list *list) { list_add(&r->head, &list->list); } -EXPORT_SYMBOL(nftnl_chain_list_add); +EXPORT_SYMBOL(nftnl_chain_list_add_tail); void nftnl_chain_list_add_tail(struct nftnl_chain *r, struct nftnl_chain_list *list) { list_add_tail(&r->head, &list->list); } -EXPORT_SYMBOL(nftnl_chain_list_add_tail); +EXPORT_SYMBOL(nftnl_chain_list_del); void nftnl_chain_list_del(struct nftnl_chain *r) { list_del(&r->head); } -EXPORT_SYMBOL(nftnl_chain_list_del); +EXPORT_SYMBOL(nftnl_chain_list_foreach); int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list, int (*cb)(struct nftnl_chain *r, void *data), void *data) @@ -943,13 +944,13 @@ int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list, } return 0; } -EXPORT_SYMBOL(nftnl_chain_list_foreach); struct nftnl_chain_list_iter { const struct nftnl_chain_list *list; struct nftnl_chain *cur; }; +EXPORT_SYMBOL(nftnl_chain_list_iter_create); struct nftnl_chain_list_iter * nftnl_chain_list_iter_create(const struct nftnl_chain_list *l) { @@ -967,8 +968,8 @@ nftnl_chain_list_iter_create(const struct nftnl_chain_list *l) return iter; } -EXPORT_SYMBOL(nftnl_chain_list_iter_create); +EXPORT_SYMBOL(nftnl_chain_list_iter_next); struct nftnl_chain *nftnl_chain_list_iter_next(struct nftnl_chain_list_iter *iter) { struct nftnl_chain *r = iter->cur; @@ -983,10 +984,9 @@ struct nftnl_chain *nftnl_chain_list_iter_next(struct nftnl_chain_list_iter *ite return r; } -EXPORT_SYMBOL(nftnl_chain_list_iter_next); +EXPORT_SYMBOL(nftnl_chain_list_iter_destroy); void nftnl_chain_list_iter_destroy(struct nftnl_chain_list_iter *iter) { xfree(iter); } -EXPORT_SYMBOL(nftnl_chain_list_iter_destroy); -- cgit v1.2.3