From 84d12cfacf8ddd857a09435f3d982ab6250d250c Mon Sep 17 00:00:00 2001 From: Nicholas Vinson Date: Wed, 15 Jun 2022 07:35:28 -0400 Subject: build: fix clang+glibc snprintf substitution error When building with clang and glibc and -D_FORTIFY_SOURCE=2 is passed to clang, the snprintf member of the expr_ops and obj_ops structures will be incorrectly replaced with __builtin_snprintf_chk() which results in "error: no member named '__builtin___snprintf_chk'" errors at build time. This patch changes the member name from 'snprintf' to 'output' to prevent the replacement. This bug can be emulated using GCC by undefining the __va_arg_pack macro before stdio.h is included. This patch is based on the notes provided in https://bugs.gentoo.org/807766. Signed-off-by: Nicholas Vinson Signed-off-by: Florian Westphal --- include/obj.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/obj.h') diff --git a/include/obj.h b/include/obj.h index 60dc853..d848ac9 100644 --- a/include/obj.h +++ b/include/obj.h @@ -109,7 +109,7 @@ struct obj_ops { const void *(*get)(const struct nftnl_obj *e, uint16_t type, uint32_t *data_len); int (*parse)(struct nftnl_obj *e, struct nlattr *attr); void (*build)(struct nlmsghdr *nlh, const struct nftnl_obj *e); - int (*snprintf)(char *buf, size_t len, uint32_t flags, const struct nftnl_obj *e); + int (*output)(char *buf, size_t len, uint32_t flags, const struct nftnl_obj *e); }; extern struct obj_ops obj_ops_counter; -- cgit v1.2.3