aboutsummaryrefslogtreecommitdiff
path: root/libraries/libstrophe/use-void-to-store-func-ptr.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/libstrophe/use-void-to-store-func-ptr.patch')
-rw-r--r--libraries/libstrophe/use-void-to-store-func-ptr.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/libraries/libstrophe/use-void-to-store-func-ptr.patch b/libraries/libstrophe/use-void-to-store-func-ptr.patch
new file mode 100644
index 0000000000..3c3a46e9ea
--- /dev/null
+++ b/libraries/libstrophe/use-void-to-store-func-ptr.patch
@@ -0,0 +1,53 @@
+From dfb3e868248d86fc0f5553dffbb6f7c367c3c383 Mon Sep 17 00:00:00 2001
+From: Steffen Jaeckel <s@jaeckel.eu>
+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 <s@jaeckel.eu>
+---
+ 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()