From dfb3e868248d86fc0f5553dffbb6f7c367c3c383 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Wed, 26 Mar 2025 14:14:19 +0100 Subject: [PATCH] Use `void*` to store function pointer when compiled as C23. [0] decided that `rettype (*foo)();` must now be interpreted as `rettype (*foo)(void);`. Luckily it also allows now to store function pointers in a `void*` (c.f. Ch. J.5.7). [0]: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf Signed-off-by: Steffen Jaeckel --- src/common.h | 7 ++++++- src/handler.c | 2 -- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/common.h b/src/common.h index 75134bea..c387c0fe 100644 --- a/src/common.h +++ b/src/common.h @@ -30,12 +30,17 @@ #include "snprintf.h" /** handlers **/ +#if (__STDC_VERSION__ >= 202000L) +typedef void* xmpp_void_handler; +#else +typedef int (*xmpp_void_handler)(); +#endif typedef struct _xmpp_handlist_t xmpp_handlist_t; struct _xmpp_handlist_t { /* common members */ int user_handler; - int (*handler)(); + xmpp_void_handler handler; void *userdata; int enabled; /* handlers are added disabled and enabled after the * handler chain is processed to prevent stanzas from diff --git a/src/handler.c b/src/handler.c index 1c9bf9f7..05772522 100644 --- a/src/handler.c +++ b/src/handler.c @@ -25,8 +25,6 @@ #include "common.h" #include "ostypes.h" -typedef int (*xmpp_void_handler)(); - /* Remove item from the list pointed by head, but don't free it. * There can be a situation when user's handler deletes another handler which * is the previous in the list. handler_fire_stanza() and handler_fire_timed()