changeset 22340:06bf20f5e3ec

lib-storage: Add type checking for mailbox_list_notify_wait
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Tue, 27 Jun 2017 12:42:27 +0300
parents d3dd6c5defe8
children 508663aa112e
files src/imap/imap-notify.c src/lib-storage/mailbox-list-notify.c src/lib-storage/mailbox-list-notify.h
diffstat 3 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-notify.c	Thu Jul 06 11:24:35 2017 +0300
+++ b/src/imap/imap-notify.c	Tue Jun 27 12:42:27 2017 +0300
@@ -348,10 +348,8 @@
 		client->notify_ctx->notifying = FALSE;
 }
 
-static void notify_callback(void *context)
+static void notify_callback(struct imap_notify_namespace *notify_ns)
 {
-	struct imap_notify_namespace *notify_ns = context;
-
 	o_stream_cork(notify_ns->ctx->client->output);
 	imap_client_notify_ns(notify_ns);
 	o_stream_uncork(notify_ns->ctx->client->output);
--- a/src/lib-storage/mailbox-list-notify.c	Thu Jul 06 11:24:35 2017 +0300
+++ b/src/lib-storage/mailbox-list-notify.c	Tue Jun 27 12:42:27 2017 +0300
@@ -28,6 +28,7 @@
 	return notify->list->v.notify_next(notify, rec_r);
 }
 
+#undef mailbox_list_notify_wait
 void mailbox_list_notify_wait(struct mailbox_list_notify *notify,
 			      void (*callback)(void *context), void *context)
 {
--- a/src/lib-storage/mailbox-list-notify.h	Thu Jul 06 11:24:35 2017 +0300
+++ b/src/lib-storage/mailbox-list-notify.h	Tue Jun 27 12:42:27 2017 +0300
@@ -42,6 +42,8 @@
 	const char *old_vname;
 };
 
+typedef void mailbox_list_notify_callback_t(void *);
+
 /* Monitor for specified changes in the mailbox list.
    Returns 0 if ok, -1 if notifications aren't supported. */
 int mailbox_list_notify_init(struct mailbox_list *list,
@@ -55,7 +57,10 @@
 			     const struct mailbox_list_notify_rec **rec_r);
 /* Call the specified callback when something changes. */
 void mailbox_list_notify_wait(struct mailbox_list_notify *notify,
-			      void (*callback)(void *context), void *context);
+			      mailbox_list_notify_callback_t *callback, void *context);
+#define mailbox_list_notify_wait(notify, callback, context) \
+	mailbox_list_notify_wait(notify + CALLBACK_TYPECHECK(callback, void (*)(typeof(context))), \
+				(mailbox_list_notify_callback_t*)callback, context);
 /* Flush any delayed notifications now. */
 void mailbox_list_notify_flush(struct mailbox_list_notify *notify);