changeset 4906:0c3c948412c5 HEAD

Type safe callbacks weren't as easy as I thought. Only callback(void *context) can be handled generically. Others can be handled specially, but only if all the parameters are pointers, otherwise eg. int parameter can be replaced with long without compiler giving any warnings.
author Timo Sirainen <tss@iki.fi>
date Fri, 15 Dec 2006 20:10:51 +0200
parents ab47138f5c8f
children 5b4c9b20eba0
files src/auth/auth-request-handler.h src/imap/imap-fetch.c src/imap/imap-fetch.h src/lib-auth/auth-client.c src/lib-auth/auth-client.h src/lib-auth/auth-server-request.c src/lib-index/mail-cache-lookup.c src/lib-index/mail-cache-private.h src/lib-index/mail-hash.h src/lib-index/mail-index-private.h src/lib-index/mail-index.c src/lib-mail/istream-header-filter.h src/lib-mail/message-content-parser.c src/lib-mail/message-content-parser.h src/lib-mail/message-header-decode.c src/lib-mail/message-header-decode.h src/lib-mail/message-header-parser.h src/lib-mail/message-parser.h src/lib-settings/settings.h src/lib-sql/sql-api.h src/lib-storage/index/maildir/maildir-storage.h src/lib-storage/index/maildir/maildir-util.c src/lib-storage/mail-search.h src/lib-storage/mailbox-list.c src/lib-storage/mailbox-list.h src/lib/lib-signals.c src/lib/lib-signals.h src/lib/macros.h src/login-common/login-proxy.h
diffstat 29 files changed, 139 insertions(+), 126 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-request-handler.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/auth/auth-request-handler.h	Fri Dec 15 20:10:51 2006 +0200
@@ -12,10 +12,15 @@
 			    auth_request_callback_t *master_callback);
 #ifdef CONTEXT_TYPE_SAFETY
 #  define auth_request_handler_create(auth, callback, context, master_callback)\
-	({(void)(1 ? 0 : callback(0, context)); \
+	({(void)(1 ? 0 : callback((const char *)NULL, context)); \
 	  auth_request_handler_create(auth, \
 		(auth_request_callback_t *)callback, context, \
 		master_callback); })
+#else
+#  define auth_request_handler_create(auth, callback, context, master_callback)\
+	  auth_request_handler_create(auth, \
+		(auth_request_callback_t *)callback, context, \
+		master_callback)
 #endif
 void auth_request_handler_unref(struct auth_request_handler **handler);
 
--- a/src/imap/imap-fetch.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/imap/imap-fetch.c	Fri Dec 15 20:10:51 2006 +0200
@@ -100,7 +100,6 @@
 	return ctx;
 }
 
-#undef imap_fetch_add_handler
 void imap_fetch_add_handler(struct imap_fetch_context *ctx,
 			    bool buffered, bool want_deinit,
 			    imap_fetch_handler_t *handler, void *context)
--- a/src/imap/imap-fetch.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/imap/imap-fetch.h	Fri Dec 15 20:10:51 2006 +0200
@@ -68,9 +68,6 @@
 void imap_fetch_add_handler(struct imap_fetch_context *ctx,
 			    bool buffered, bool want_deinit,
 			    imap_fetch_handler_t *handler, void *context);
-#define imap_fetch_add_handler(ctx, buffered, want_deinit, handler, context) \
-	CONTEXT_CALLBACK3(imap_fetch_add_handler, imap_fetch_handler_t, \
-			  handler, context, ctx, buffered, want_deinit)
 
 struct imap_fetch_context *imap_fetch_init(struct client_command_context *cmd);
 int imap_fetch_deinit(struct imap_fetch_context *ctx);
--- a/src/lib-auth/auth-client.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-auth/auth-client.c	Fri Dec 15 20:10:51 2006 +0200
@@ -100,7 +100,6 @@
 		client->connections != NULL;
 }
 
-#undef auth_client_set_connect_notify
 void auth_client_set_connect_notify(struct auth_client *client,
 				    auth_connect_notify_callback_t *callback,
 				    void *context)
--- a/src/lib-auth/auth-client.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-auth/auth-client.h	Fri Dec 15 20:10:51 2006 +0200
@@ -48,10 +48,6 @@
 void auth_client_set_connect_notify(struct auth_client *client,
 				    auth_connect_notify_callback_t *callback,
 				    void *context);
-#define auth_client_set_connect_notify(client, callback, context) \
-	CONTEXT_CALLBACK3(auth_client_set_connect_notify, \
-			  auth_connect_notify_callback_t, \
-			  callback, context, client)
 const struct auth_mech_desc *
 auth_client_get_available_mechs(struct auth_client *client,
 				unsigned int *mech_count);
@@ -73,14 +69,6 @@
 			const struct auth_request_info *request_info,
 			auth_request_callback_t *callback, void *context,
 			const char **error_r);
-#ifdef CONTEXT_TYPE_SAFETY
-#  define auth_client_request_new(client, id, request_info, \
-				  callback, context, error_r) \
-	({(void)(1 ? 0 : callback(0, 0, 0, 0, context)); \
-	  auth_client_request_new(client, id, request_info, \
-		(auth_request_callback_t *)callback, context, error_r); })
-#endif
-
 /* Continue authentication. Call when
    reply->result == AUTH_CLIENT_REQUEST_CONTINUE */
 void auth_client_request_continue(struct auth_request *request,
--- a/src/lib-auth/auth-server-request.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-auth/auth-server-request.c	Fri Dec 15 20:10:51 2006 +0200
@@ -311,7 +311,6 @@
 	hash_iterate_deinit(iter);
 }
 
-#undef auth_client_request_new
 struct auth_request *
 auth_client_request_new(struct auth_client *client, struct auth_connect_id *id,
 			const struct auth_request_info *request_info,
--- a/src/lib-index/mail-cache-lookup.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-index/mail-cache-lookup.c	Fri Dec 15 20:10:51 2006 +0200
@@ -179,7 +179,6 @@
 	return FALSE;
 }
 
-#undef mail_cache_foreach
 int mail_cache_foreach(struct mail_cache_view *view, uint32_t seq,
                        mail_cache_foreach_callback_t *callback, void *context)
 {
--- a/src/lib-index/mail-cache-private.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-index/mail-cache-private.h	Fri Dec 15 20:10:51 2006 +0200
@@ -199,10 +199,6 @@
 
 int mail_cache_foreach(struct mail_cache_view *view, uint32_t seq,
 		       mail_cache_foreach_callback_t *callback, void *context);
-#define mail_cache_foreach(view, seq, callback, context) \
-	CONTEXT_CALLBACK5(mail_cache_foreach, \
-			  mail_cache_foreach_callback_t, \
-			  callback, context, view, seq)
 
 int mail_cache_transaction_commit(struct mail_cache_transaction_ctx *ctx);
 void mail_cache_transaction_rollback(struct mail_cache_transaction_ctx *ctx);
--- a/src/lib-index/mail-hash.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-index/mail-hash.h	Fri Dec 15 20:10:51 2006 +0200
@@ -71,12 +71,21 @@
 	       hash_callback_t *rec_hash_cb,
 	       hash_ctx_cmp_callback_t *key_compare_cb,
 	       void *context);
+#ifdef CONTEXT_TYPE_SAFETY
 #define mail_hash_open(index, suffix, flags, record_size, initial_count, \
 		       key_hash_cb, rec_hash_cb, key_compare_cb, context) \
-	CONTEXT_CALLBACK3(mail_hash_open, \
-			  hash_ctx_cmp_callback_t, \
-			  key_compare_cb, context, index, suffix, flags, \
-			  record_size, initial_count, key_hash_cb, rec_hash_cb)
+	({(void)(1 ? 0 : key_compare_cb((const void *)NULL, \
+					(const void *)NULL, context)); \
+	  mail_hash_open(index, suffix, flags, record_size, initial_count, \
+		key_hash_cb, rec_hash_cb, \
+		(hash_ctx_cmp_callback_t *)key_compare_cb, context); })
+#else
+#define mail_hash_open(index, suffix, flags, record_size, initial_count, \
+		       key_hash_cb, rec_hash_cb, key_compare_cb, context) \
+	  mail_hash_open(index, suffix, flags, record_size, initial_count, \
+		key_hash_cb, rec_hash_cb, \
+		(hash_ctx_cmp_callback_t *)key_compare_cb, context)
+#endif
 void mail_hash_free(struct mail_hash **hash);
 
 /* If reset or resize fails, the hash file is closed and the hash is in
--- a/src/lib-index/mail-index-private.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-index/mail-index-private.h	Fri Dec 15 20:10:51 2006 +0200
@@ -193,11 +193,6 @@
 					 uint32_t ext_id, bool call_always,
 					 mail_index_expunge_handler_t *callback,
 					 void *context);
-#define mail_index_register_expunge_handler(index, ext_id, call_always, \
-					    callback, context) \
-	CONTEXT_CALLBACK5(mail_index_register_expunge_handler, \
-			  mail_index_expunge_handler_t, \
-			  callback, context, index, ext_id, call_always)
 void mail_index_unregister_expunge_handler(struct mail_index *index,
 					   uint32_t ext_id);
 void mail_index_register_sync_handler(struct mail_index *index, uint32_t ext_id,
--- a/src/lib-index/mail-index.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-index/mail-index.c	Fri Dec 15 20:10:51 2006 +0200
@@ -108,7 +108,6 @@
 	return ext_count;
 }
 
-#undef mail_index_register_expunge_handler
 void mail_index_register_expunge_handler(struct mail_index *index,
 					 uint32_t ext_id, bool call_always,
 					 mail_index_expunge_handler_t *cb,
--- a/src/lib-mail/istream-header-filter.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/istream-header-filter.h	Fri Dec 15 20:10:51 2006 +0200
@@ -27,10 +27,18 @@
 			      const char *const *headers,
 			      unsigned int headers_count,
 			      header_filter_callback *callback, void *context);
-#define i_stream_create_header_filter(input, flags, headers, headers_count, \
-				      callback, context) \
-	CONTEXT_CALLBACK3(i_stream_create_header_filter, \
-			  header_filter_callback, callback, context, \
-			  input, flags, headers, headers_count)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define i_stream_create_header_filter(input, flags, headers, headers_count, \
+				        callback, context) \
+	({(void)(1 ? 0 : callback((struct message_header_line *)0, \
+				  (bool *)0, context)); \
+	  i_stream_create_header_filter(input, flags, headers, headers_count, \
+			(header_filter_callback *)callback, context); })
+#else
+#  define i_stream_create_header_filter(input, flags, headers, headers_count, \
+				        callback, context) \
+	  i_stream_create_header_filter(input, flags, headers, headers_count, \
+			(header_filter_callback *)callback, context)
+#endif
 
 #endif
--- a/src/lib-mail/message-content-parser.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/message-content-parser.c	Fri Dec 15 20:10:51 2006 +0200
@@ -8,7 +8,6 @@
 parse_content_callback_t *null_parse_content_callback = NULL;
 parse_content_param_callback_t *null_parse_content_param_callback = NULL;
 
-#undef message_content_parse_header
 void message_content_parse_header(const unsigned char *data, size_t size,
 				  parse_content_callback_t *callback,
 				  parse_content_param_callback_t *param_cb,
--- a/src/lib-mail/message-content-parser.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/message-content-parser.h	Fri Dec 15 20:10:51 2006 +0200
@@ -17,13 +17,5 @@
 				  parse_content_callback_t *callback,
 				  parse_content_param_callback_t *param_cb,
 				  void *context);
-#ifdef CONTEXT_TYPE_SAFETY
-#  define message_content_parse_header(data, size, callback, param_cb, context)\
-	({(void)(1 ? 0 : callback(0, 0, context)); \
-	  (void)(1 ? 0 : param_cb(0, 0, 0, 0, 0, context)); \
-	  message_content_parse_header(data, size, \
-		(parse_content_callback_t *)callback, \
-		(parse_content_param_callback_t *)param_cb, context); })
-#endif
 
 #endif
--- a/src/lib-mail/message-header-decode.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/message-header-decode.c	Fri Dec 15 20:10:51 2006 +0200
@@ -84,7 +84,6 @@
 	return ret;
 }
 
-#undef message_header_decode
 void message_header_decode(const unsigned char *data, size_t size,
 			   message_header_decode_callback_t *callback,
 			   void *context)
--- a/src/lib-mail/message-header-decode.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/message-header-decode.h	Fri Dec 15 20:10:51 2006 +0200
@@ -12,9 +12,5 @@
 void message_header_decode(const unsigned char *data, size_t size,
 			   message_header_decode_callback_t *callback,
 			   void *context);
-#define message_header_decode(data, size, callback, context) \
-	CONTEXT_CALLBACK4(message_header_decode, \
-			  message_header_decode_callback_t, \
-			  callback, context, data, size)
 
 #endif
--- a/src/lib-mail/message-header-parser.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/message-header-parser.h	Fri Dec 15 20:10:51 2006 +0200
@@ -55,8 +55,15 @@
 /* Read and parse the header from the given stream. */
 void message_parse_header(struct istream *input, struct message_size *hdr_size,
 			  message_header_callback_t *callback, void *context);
-#define message_parse_header(input, hdr_size, callback, context) \
-	CONTEXT_CALLBACK2(message_parse_header, message_header_callback_t, \
-			  callback, context, input, hdr_size)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define message_parse_header(input, hdr_size, callback, context) \
+	({(void)(1 ? 0 : callback((struct message_header_line *)0, context)); \
+	  message_parse_header(input, hdr_size, \
+		(message_header_callback_t *)callback, context); })
+#else
+#  define message_parse_header(input, hdr_size, callback, context) \
+	  message_parse_header(input, hdr_size, \
+		(message_header_callback_t *)callback, context)
+#endif
 
 #endif
--- a/src/lib-mail/message-parser.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-mail/message-parser.h	Fri Dec 15 20:10:51 2006 +0200
@@ -74,29 +74,51 @@
 				 struct message_size *hdr_size,
 				 message_part_header_callback_t *callback,
 				 void *context);
-#define message_parser_parse_header(ctx, hdr_size, callback, context) \
-	CONTEXT_CALLBACK3(message_parser_parse_header, \
-			  message_part_header_callback_t, \
-			  callback, context, ctx, hdr_size)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define message_parser_parse_header(ctx, hdr_size, callback, context) \
+	({(void)(1 ? 0 : callback((struct message_part *)0, \
+				  (struct message_header_line *)0, context)); \
+	  message_parser_parse_header(ctx, hdr_size, \
+		(message_part_header_callback_t *)callback, context); })
+#else
+#  define message_parser_parse_header(ctx, hdr_size, callback, context) \
+	  message_parser_parse_header(ctx, hdr_size, \
+		(message_part_header_callback_t *)callback, context)
+#endif
+
 /* Read and parse body. If message is a MIME multipart or message/rfc822
    message, hdr_callback is called for all headers. body_callback is called
    for the body content. */
 void message_parser_parse_body(struct message_parser_ctx *ctx,
 			       message_part_header_callback_t *hdr_callback,
 			       void *context);
-#define message_parser_parse_body(ctx, callback, context) \
-	CONTEXT_CALLBACK3(message_parser_parse_body, \
-			  message_part_header_callback_t, \
-			  callback, context, ctx)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define message_parser_parse_body(ctx, callback, context) \
+	({(void)(1 ? 0 : callback((struct message_part *)0, \
+				  (struct message_header_line *)0, context)); \
+	  message_parser_parse_body(ctx, \
+		(message_part_header_callback_t *)callback, context); })
+#else
+#  define message_parser_parse_body(ctx, callback, context) \
+	  message_parser_parse_body(ctx, \
+		(message_part_header_callback_t *)callback, context)
+#endif
 
 /* callback is called for each field in message header. */
 void message_parse_from_parts(struct message_part *part, struct istream *input,
 			      message_part_header_callback_t *callback,
 			      void *context);
-#define message_parse_from_parts(part, input, callback, context) \
-	CONTEXT_CALLBACK3(message_parse_from_parts, \
-			  message_part_header_callback_t, \
-			  callback, context, part, input)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define message_parse_from_parts(part, input, callback, context) \
+	({(void)(1 ? 0 : callback((struct message_part *)0, \
+				  (struct message_header_line *)0, context)); \
+	  message_parse_from_parts(part, input, \
+		(message_part_header_callback_t *)callback, context); })
+#else
+#  define message_parse_from_parts(part, input, callback, context) \
+	  message_parse_from_parts(part, input, \
+		(message_part_header_callback_t *)callback, context)
+#endif
 
 /* Update the physical_size of all parts. If use_crlf is TRUE, they're set
    to same as virtual_size. If use_crlf is FALSE, they're set to
--- a/src/lib-settings/settings.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-settings/settings.h	Fri Dec 15 20:10:51 2006 +0200
@@ -32,10 +32,15 @@
 		   settings_section_callback_t *sect_callback, void *context);
 #ifdef CONTEXT_TYPE_SAFETY
 #  define settings_read(path, section, callback, sect_callback, context) \
-	({(void)(1 ? 0 : callback(0, 0, context)); \
-	  (void)(1 ? 0 : sect_callback(0, 0, context, 0)); \
+	({(void)(1 ? 0 : callback((const char *)0, (const char *)0, context)); \
+	  (void)(1 ? 0 : sect_callback((const char *)0, (const char *)0, \
+				       context, (const char **)0)); \
 	  settings_read(path, section, (settings_callback_t *)callback, \
 		(settings_section_callback_t *)sect_callback, context); })
+#else
+#  define settings_read(path, section, callback, sect_callback, context) \
+	  settings_read(path, section, (settings_callback_t *)callback, \
+		(settings_section_callback_t *)sect_callback, context)
 #endif
 
 #endif
--- a/src/lib-sql/sql-api.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-sql/sql-api.h	Fri Dec 15 20:10:51 2006 +0200
@@ -45,9 +45,15 @@
 /* Execute SQL query and return result in callback. */
 void sql_query(struct sql_db *db, const char *query,
 	       sql_query_callback_t *callback, void *context);
-#define sql_query(db, query, callback, context) \
-	CONTEXT_CALLBACK2(sql_query, sql_query_callback_t, \
-			  callback, context, db, query)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define sql_query(db, query, callback, context) \
+	({(void)(1 ? 0 : callback((struct sql_result *)NULL, context)); \
+	  sql_query(db, query, \
+		(sql_query_callback_t *)callback, context); })
+#else
+#  define sql_query(db, query, callback, context) \
+	  sql_query(db, query, (sql_query_callback_t *)callback, context)
+#endif
 /* Execute blocking SQL query and return result. */
 struct sql_result *sql_query_s(struct sql_db *db, const char *query);
 
@@ -83,9 +89,15 @@
 /* Commit transaction. */
 void sql_transaction_commit(struct sql_transaction_context **ctx,
 			    sql_commit_callback_t *callback, void *context);
-#define sql_transaction_commit(ctx, callback, context) \
-	CONTEXT_CALLBACK2(sql_transaction_commit, sql_commit_callback_t, \
-			  callback, context, ctx)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define sql_transaction_commit(ctx, callback, context) \
+	({(void)(1 ? 0 : callback((const char *)NULL, context)); \
+	  sql_transaction_commit(ctx, \
+		(sql_query_callback_t *)callback, context); })
+#else
+#  define sql_transaction_commit(ctx, callback, context) \
+	  sql_transaction_commit(ctx, (sql_query_callback_t *)callback, context)
+#endif
 /* Synchronous commit. Returns 0 if ok, -1 if error. */
 int sql_transaction_commit_s(struct sql_transaction_context **ctx,
 			     const char **error_r);
--- a/src/lib-storage/index/maildir/maildir-storage.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-storage/index/maildir/maildir-storage.h	Fri Dec 15 20:10:51 2006 +0200
@@ -89,10 +89,17 @@
 				 const char *path, void *context);
 
 int maildir_file_do(struct maildir_mailbox *mbox, uint32_t seq,
-		    maildir_file_do_func *func, void *context);
-#define maildir_file_do(mbox, seq, func, context) \
-	CONTEXT_CALLBACK3(maildir_file_do, maildir_file_do_func, \
-			  func, context, mbox, seq)
+		    maildir_file_do_func *callback, void *context);
+#ifdef CONTEXT_TYPE_SAFETY
+#  define maildir_file_do(mbox, seq, callback, context) \
+	({(void)(1 ? 0 : callback((struct maildir_mailbox *)NULL, \
+				  (const char *)NULL, context)); \
+	  maildir_file_do(mbox, seq, \
+		(maildir_file_do_func *)callback, context); })
+#else
+#  define maildir_file_do(mbox, seq, callback, context) \
+	maildir_file_do(mbox, seq, (maildir_file_do_func *)callback, context)
+#endif
 
 const char *maildir_generate_tmp_filename(const struct timeval *tv);
 int maildir_create_tmp(struct maildir_mailbox *mbox, const char *dir,
--- a/src/lib-storage/index/maildir/maildir-util.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-storage/index/maildir/maildir-util.c	Fri Dec 15 20:10:51 2006 +0200
@@ -14,7 +14,7 @@
 #include <sys/stat.h>
 
 static int maildir_file_do_try(struct maildir_mailbox *mbox, uint32_t uid,
-			       maildir_file_do_func *func, void *context)
+			       maildir_file_do_func *callback, void *context)
 {
 	const char *fname, *path;
         enum maildir_uidlist_rec_flag flags;
@@ -28,7 +28,7 @@
 	if ((flags & MAILDIR_UIDLIST_REC_FLAG_NEW_DIR) != 0) {
 		/* probably in new/ dir */
 		path = t_strconcat(mbox->path, "/new/", fname, NULL);
-		ret = func(mbox, path, context);
+		ret = callback(mbox, path, context);
 		if (ret != 0) {
 			t_pop();
 			return ret;
@@ -36,18 +36,18 @@
 	}
 
 	path = t_strconcat(mbox->path, "/cur/", fname, NULL);
-	ret = func(mbox, path, context);
+	ret = callback(mbox, path, context);
 	t_pop();
 	return ret;
 }
 
 #undef maildir_file_do
 int maildir_file_do(struct maildir_mailbox *mbox, uint32_t uid,
-		    maildir_file_do_func *func, void *context)
+		    maildir_file_do_func *callback, void *context)
 {
 	int i, ret;
 
-	ret = maildir_file_do_try(mbox, uid, func, context);
+	ret = maildir_file_do_try(mbox, uid, callback, context);
 	for (i = 0; i < 10 && ret == 0; i++) {
 		/* file is either renamed or deleted. sync the maildir and
 		   see which one. if file appears to be renamed constantly,
@@ -55,7 +55,7 @@
 		if (maildir_storage_sync_force(mbox) < 0)
 			return -1;
 
-		ret = maildir_file_do_try(mbox, uid, func, context);
+		ret = maildir_file_do_try(mbox, uid, callback, context);
 	}
 
 	if (i == 10) {
--- a/src/lib-storage/mail-search.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-storage/mail-search.h	Fri Dec 15 20:10:51 2006 +0200
@@ -80,10 +80,16 @@
 int mail_search_args_foreach(struct mail_search_arg *args,
 			     mail_search_foreach_callback_t *callback,
 			     void *context);
-#define mail_search_args_foreach(args, callback, context) \
-	CONTEXT_CALLBACK2(mail_search_args_foreach, \
-			  mail_search_foreach_callback_t, \
-			  callback, context, args)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define mail_search_args_foreach(args, callback, context) \
+	({(void)(1 ? 0 : callback((struct mail_search_arg *)NULL, context)); \
+	  mail_search_args_foreach(args, \
+		(mail_search_foreach_callback_t *)callback, context); })
+#else
+#  define mail_search_args_foreach(args, callback, context) \
+	  mail_search_args_foreach(args, \
+		(mail_search_foreach_callback_t *)callback, context)
+#endif
 
 /* Fills have_headers and have_body based on if such search argument exists
    that needs to be checked. Returns the headers that we're searching for, or
--- a/src/lib-storage/mailbox-list.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-storage/mailbox-list.c	Fri Dec 15 20:10:51 2006 +0200
@@ -72,7 +72,6 @@
 		array_free(&mailbox_list_drivers);
 }
 
-#undef mailbox_list_init
 int mailbox_list_init(const char *driver,
 		      const struct mailbox_list_settings *set,
 		      enum mailbox_list_flags flags,
--- a/src/lib-storage/mailbox-list.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib-storage/mailbox-list.h	Fri Dec 15 20:10:51 2006 +0200
@@ -110,14 +110,6 @@
 		      enum mailbox_list_flags flags,
 		      mailbox_list_is_mailbox_t *callback, void *context,
 		      struct mailbox_list **list_r, const char **error_r);
-#ifdef CONTEXT_TYPE_SAFETY
-#  define mailbox_list_init(driver, set, flags, callback, context, \
-			    list_r, error_r) \
-	({(void)(1 ? 0 : callback(0, 0, 0, 0, 0, context)); \
-	  mailbox_list_init(driver, set, flags, \
-		(mailbox_list_is_mailbox_t *)callback, context, \
-		list_r, error_r); })
-#endif
 void mailbox_list_deinit(struct mailbox_list *list);
 
 const char *mailbox_list_get_driver_name(struct mailbox_list *list);
--- a/src/lib/lib-signals.c	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib/lib-signals.c	Fri Dec 15 20:10:51 2006 +0200
@@ -99,7 +99,6 @@
 	}
 }
 
-#undef lib_signals_set_handler
 void lib_signals_set_handler(int signo, bool delayed,
 			     signal_handler_t *handler, void *context)
 {
@@ -163,7 +162,6 @@
 		i_fatal("sigaction(%d): %m", signo);
 }
 
-#undef lib_signals_unset_handler
 void lib_signals_unset_handler(int signo, signal_handler_t *handler,
 			       void *context)
 {
--- a/src/lib/lib-signals.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib/lib-signals.h	Fri Dec 15 20:10:51 2006 +0200
@@ -9,16 +9,10 @@
    will be called later, ie. not as a real signal handler. */
 void lib_signals_set_handler(int signo, bool delayed,
 			     signal_handler_t *handler, void *context);
-#define lib_signals_set_handler(signo, delayed, handler, context) \
-	CONTEXT_CALLBACK2(lib_signals_set_handler, signal_handler_t, \
-			  handler, context, signo, delayed)
 /* Ignore given signal. */
 void lib_signals_ignore(int signo, bool restart_syscalls);
 void lib_signals_unset_handler(int signo,
 			       signal_handler_t *handler, void *context);
-#define lib_signals_unset_handler(signo, handler, context) \
-	CONTEXT_CALLBACK2(lib_signals_unset_handler, signal_handler_t, \
-			  handler, context, signo)
 
 void lib_signals_init(void);
 void lib_signals_deinit(void);
--- a/src/lib/macros.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/lib/macros.h	Fri Dec 15 20:10:51 2006 +0200
@@ -136,25 +136,9 @@
 #  define CONTEXT_CALLBACK(name, callback_type, callback, context, ...) \
 	({(void)(1 ? 0 : callback(context)); \
 	name(__VA_ARGS__, (callback_type *)callback, context); })
-#  define CONTEXT_CALLBACK2(name, callback_type, callback, context, ...) \
-	({(void)(1 ? 0 : callback(0, context)); \
-	name(__VA_ARGS__, (callback_type *)callback, context); })
-#  define CONTEXT_CALLBACK3(name, callback_type, callback, context, ...) \
-	({(void)(1 ? 0 : callback(0, 0, context)); \
-	name(__VA_ARGS__, (callback_type *)callback, context); })
-#  define CONTEXT_CALLBACK4(name, callback_type, callback, context, ...) \
-	({(void)(1 ? 0 : callback(0, 0, 0, context)); \
-	name(__VA_ARGS__, (callback_type *)callback, context); })
-#  define CONTEXT_CALLBACK5(name, callback_type, callback, context, ...) \
-	({(void)(1 ? 0 : callback(0, 0, 0, 0, context)); \
-	name(__VA_ARGS__, (callback_type *)callback, context); })
 #else
 #  define CONTEXT_CALLBACK(name, callback_type, callback, context, ...) \
 	name(__VA_ARGS__, (callback_type *)callback, context)
-#  define CONTEXT_CALLBACK2 CONTEXT_CALLBACK
-#  define CONTEXT_CALLBACK3 CONTEXT_CALLBACK
-#  define CONTEXT_CALLBACK4 CONTEXT_CALLBACK
-#  define CONTEXT_CALLBACK5 CONTEXT_CALLBACK
 #endif
 
 /* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with
--- a/src/login-common/login-proxy.h	Fri Dec 15 19:17:21 2006 +0200
+++ b/src/login-common/login-proxy.h	Fri Dec 15 20:10:51 2006 +0200
@@ -12,9 +12,17 @@
 struct login_proxy *
 login_proxy_new(struct client *client, const char *host, unsigned int port,
 		proxy_callback_t *callback, void *context);
-#define login_proxy_new(client, host, port, callback, context) \
-	CONTEXT_CALLBACK3(login_proxy_new, proxy_callback_t, \
-			  callback, context, client, host, port)
+#ifdef CONTEXT_TYPE_SAFETY
+#  define login_proxy_new(client, host, port, callback, context) \
+	({(void)(1 ? 0 : callback((struct istream *)NULL, \
+				  (struct ostream *)NULL, context)); \
+	  login_proxy_new(client, host, port, \
+		(proxy_callback_t *)callback, context); })
+#else
+#  define login_proxy_new(client, host, port, callback, context) \
+	  login_proxy_new(client, host, port, \
+		(proxy_callback_t *)callback, context)
+#endif
 /* Free the proxy. This should be called if authentication fails. */
 void login_proxy_free(struct login_proxy *proxy);