From 72e6eff0251bffec72e0b8b2cedf72f173c8b9e9 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Fri, 4 Oct 2019 01:26:47 +0200 Subject: [PATCH] Fix compat with NetBSD >= 10 kevent::udata was switched from intptr_t to void*. Handle both cases with the GCC extension typeof(). --- kqueue.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kqueue.c b/kqueue.c index d08f512ce4..dfd7751d64 100644 --- a/kqueue.c +++ b/kqueue.c @@ -51,7 +51,10 @@ /* Some platforms apparently define the udata field of struct kevent as * intptr_t, whereas others define it as void*. There doesn't seem to be an * easy way to tell them apart via autoconf, so we need to use OS macros. */ -#if defined(EVENT__HAVE_INTTYPES_H) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__darwin__) && !defined(__APPLE__) && !defined(__CloudABI__) +#if defined(__NetBSD__) +#define PTR_TO_UDATA(x) ((typeof(((struct kevent *)0)->udata))(x)) +#define INT_TO_UDATA(x) ((typeof(((struct kevent *)0)->udata))(intptr_t)(x)) +#elif defined(EVENT__HAVE_INTTYPES_H) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__darwin__) && !defined(__APPLE__) && !defined(__CloudABI__) #define PTR_TO_UDATA(x) ((intptr_t)(x)) #define INT_TO_UDATA(x) ((intptr_t)(x)) #else