dovecot-2.2: Removed CONTEXT_TYPE_SAFETY macro and reimplemented...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Aug 19 16:17:47 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/d3db2ba15d00
changeset: 14921:d3db2ba15d00
user: Timo Sirainen <tss at iki.fi>
date: Sun Aug 19 16:17:32 2012 +0300
description:
Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
gcc/clang now gives a compiler error in many places if callback isn't
exactly what was expected. It's also now much easier to add more of these
checks.
diffstat:
src/anvil/anvil-connection.c | 5 +-
src/auth/auth-request-handler.h | 16 +++-----
src/auth/db-dict.c | 3 +-
src/auth/db-ldap.c | 3 +-
src/auth/db-sql.c | 3 +-
src/config/config-connection.c | 3 +-
src/doveadm/doveadm-mail-mailbox.c | 4 +-
src/doveadm/doveadm-stats.c | 2 +-
src/doveadm/doveadm.c | 6 +-
src/imap/imap-fetch.h | 15 ++-----
src/indexer/indexer-client.c | 3 +-
src/lib-dns/dns-lookup.c | 4 +-
src/lib-dns/dns-lookup.h | 11 +++--
src/lib-imap-storage/imap-msgpart.c | 6 ++-
src/lib-index/mail-index-util.c | 16 ++-----
src/lib-lda/mail-send.c | 5 +-
src/lib-mail/istream-header-filter.c | 8 ++--
src/lib-mail/istream-header-filter.h | 19 +++------
src/lib-mail/message-header-parser.h | 15 ++-----
src/lib-mail/message-parser.h | 30 +++++----------
src/lib-mail/test-istream-header-filter.c | 8 ++-
src/lib-master/master-service.c | 4 +-
src/lib-settings/settings.c | 7 +--
src/lib-settings/settings.h | 30 ++++++++-------
src/lib-sql/sql-api.h | 27 ++++---------
src/lib-storage/index/dbox-multi/mdbox-purge.c | 5 +-
src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c | 14 +++----
src/lib-storage/index/imapc/imapc-mail-fetch.c | 2 +-
src/lib-storage/index/index-mail-binary.c | 2 +-
src/lib-storage/index/index-mail.c | 2 +-
src/lib-storage/index/index-search.c | 7 +--
src/lib-storage/index/index-sort-string.c | 5 +-
src/lib-storage/index/index-thread.c | 6 +--
src/lib-storage/index/maildir/maildir-mail.c | 3 +-
src/lib-storage/index/maildir/maildir-storage.h | 15 ++-----
src/lib-storage/index/maildir/maildir-sync-index.c | 4 +-
src/lib-storage/index/mbox/mbox-mail.c | 2 +-
src/lib-storage/index/pop3c/pop3c-sync.c | 4 +-
src/lib-storage/mail-search.h | 13 ++----
src/lib-storage/mail-storage.h | 14 ++-----
src/lib-storage/mailbox-header.c | 2 +-
src/lib/array.h | 27 ++++----------
src/lib/bsearch-insert-pos.c | 1 +
src/lib/bsearch-insert-pos.h | 22 +++++-----
src/lib/child-wait.h | 14 ++----
src/lib/connection.c | 2 +-
src/lib/ioloop.h | 30 ++++++++--------
src/lib/istream.h | 5 +-
src/lib/macros.h | 17 ++------
src/lib/module-dir.c | 2 +-
src/lib/ostream.h | 5 +-
src/lib/strfuncs.c | 18 ++-------
src/lib/strfuncs.h | 20 ++++++++--
src/lib/test-bsearch-insert-pos.c | 4 +-
src/plugins/acl/acl-backend.c | 8 ++--
src/plugins/fts-squat/squat-uidlist.c | 6 +--
src/plugins/pop3-migration/pop3-migration-plugin.c | 2 +-
57 files changed, 218 insertions(+), 318 deletions(-)
diffs (truncated from 1272 to 300 lines):
diff -r a097ef0a9d6d -r d3db2ba15d00 src/anvil/anvil-connection.c
--- a/src/anvil/anvil-connection.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/anvil/anvil-connection.c Sun Aug 19 16:17:32 2012 +0300
@@ -129,9 +129,8 @@
return 0;
}
-static void anvil_connection_input(void *context)
+static void anvil_connection_input(struct anvil_connection *conn)
{
- struct anvil_connection *conn = context;
const char *line, *const *args, *error;
switch (i_stream_read(conn->input)) {
@@ -153,7 +152,7 @@
if (anvil_restarted && (conn->master || conn->fifo)) {
/* old pending data. ignore input until we get
the handshake. */
- anvil_connection_input(context);
+ anvil_connection_input(conn);
return;
}
i_error("Anvil client not compatible with this server "
diff -r a097ef0a9d6d -r d3db2ba15d00 src/auth/auth-request-handler.h
--- a/src/auth/auth-request-handler.h Sun Aug 19 14:21:37 2012 +0300
+++ b/src/auth/auth-request-handler.h Sun Aug 19 16:17:32 2012 +0300
@@ -17,18 +17,14 @@
struct auth_request_handler *
auth_request_handler_create(auth_request_callback_t *callback, void *context,
auth_request_callback_t *master_callback);
-#ifdef CONTEXT_TYPE_SAFETY
-# define auth_request_handler_create(callback, context, master_callback)\
- ({(void)(1 ? 0 : callback((struct auth_stream_reply *)NULL, context)); \
+#define auth_request_handler_create(callback, context, master_callback)\
auth_request_handler_create( \
- (auth_request_callback_t *)callback, context, \
- master_callback); })
-#else
-# define auth_request_handler_create(callback, context, master_callback)\
- auth_request_handler_create( \
- (auth_request_callback_t *)callback, context, \
+ (auth_request_callback_t *)callback, \
+ (void *)((char*)context + \
+ CALLBACK_TYPECHECK(callback, void (*)( \
+ struct auth_stream_reply *, typeof(context)))), \
master_callback)
-#endif
+
void auth_request_handler_destroy(struct auth_request_handler **handler);
void auth_request_handler_unref(struct auth_request_handler **handler);
void auth_request_handler_abort_requests(struct auth_request_handler *handler);
diff -r a097ef0a9d6d -r d3db2ba15d00 src/auth/db-dict.c
--- a/src/auth/db-dict.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/auth/db-dict.c Sun Aug 19 16:17:32 2012 +0300
@@ -81,8 +81,7 @@
conn->config_path = p_strdup(pool, config_path);
conn->set = default_dict_settings;
- if (!settings_read(config_path, NULL, parse_setting,
- null_settings_section_callback, conn))
+ if (!settings_read_nosection(config_path, parse_setting, conn))
exit(FATAL_DEFAULT);
if (conn->set.uri == NULL)
diff -r a097ef0a9d6d -r d3db2ba15d00 src/auth/db-ldap.c
--- a/src/auth/db-ldap.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/auth/db-ldap.c Sun Aug 19 16:17:32 2012 +0300
@@ -1402,8 +1402,7 @@
conn->fd = -1;
conn->config_path = p_strdup(pool, config_path);
conn->set = default_ldap_settings;
- if (!settings_read(config_path, NULL, parse_setting,
- null_settings_section_callback, conn))
+ if (!settings_read_nosection(config_path, parse_setting, conn))
exit(FATAL_DEFAULT);
if (conn->set.base == NULL)
diff -r a097ef0a9d6d -r d3db2ba15d00 src/auth/db-sql.c
--- a/src/auth/db-sql.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/auth/db-sql.c Sun Aug 19 16:17:32 2012 +0300
@@ -86,8 +86,7 @@
conn->config_path = p_strdup(pool, config_path);
conn->set = default_sql_settings;
- if (!settings_read(config_path, NULL, parse_setting,
- null_settings_section_callback, conn))
+ if (!settings_read_nosection(config_path, parse_setting, conn))
exit(FATAL_DEFAULT);
if (conn->set.password_query == default_sql_settings.password_query)
diff -r a097ef0a9d6d -r d3db2ba15d00 src/config/config-connection.c
--- a/src/config/config-connection.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/config/config-connection.c Sun Aug 19 16:17:32 2012 +0300
@@ -140,9 +140,8 @@
return 0;
}
-static void config_connection_input(void *context)
+static void config_connection_input(struct config_connection *conn)
{
- struct config_connection *conn = context;
const char *const *args, *line;
switch (i_stream_read(conn->input)) {
diff -r a097ef0a9d6d -r d3db2ba15d00 src/doveadm/doveadm-mail-mailbox.c
--- a/src/doveadm/doveadm-mail-mailbox.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/doveadm/doveadm-mail-mailbox.c Sun Aug 19 16:17:32 2012 +0300
@@ -261,10 +261,8 @@
return &ctx->ctx.ctx;
}
-static int i_strcmp_reverse_p(const void *p1, const void *p2)
+static int i_strcmp_reverse_p(const char *const *s1, const char *const *s2)
{
- const char *const *s1 = p1, *const *s2 = p2;
-
return -strcmp(*s1, *s2);
}
diff -r a097ef0a9d6d -r d3db2ba15d00 src/doveadm/doveadm-stats.c
--- a/src/doveadm/doveadm-stats.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/doveadm/doveadm-stats.c Sun Aug 19 16:17:32 2012 +0300
@@ -372,7 +372,7 @@
stats_drop_stale(ctx);
sort_ctx = ctx;
- array_sort(&ctx->lines, ctx->lines_sort);
+ array_sort(&ctx->lines, *ctx->lines_sort);
sort_ctx = NULL;
return TRUE;
}
diff -r a097ef0a9d6d -r d3db2ba15d00 src/doveadm/doveadm.c
--- a/src/doveadm/doveadm.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/doveadm/doveadm.c Sun Aug 19 16:17:32 2012 +0300
@@ -55,15 +55,15 @@
doveadm_usage_compress_lines(FILE *out, const char *str, const char *prefix)
{
const char *cmd, *args, *p, *short_name, *prev_name = "";
- char **lines;
+ const char **lines;
unsigned int i, count, prefix_len = strlen(prefix);
/* split lines */
- lines = p_strsplit(pool_datastack_create(), str, "\n");
+ lines = (void *)p_strsplit(pool_datastack_create(), str, "\n");
for (count = 0; lines[count] != NULL; count++) ;
/* sort lines */
- qsort(lines, count, sizeof(*lines), i_strcmp_p);
+ i_qsort(lines, count, sizeof(*lines), i_strcmp_p);
/* print lines, compress subcommands into a single line */
for (i = 0; i < count; i++) {
diff -r a097ef0a9d6d -r d3db2ba15d00 src/imap/imap-fetch.h
--- a/src/imap/imap-fetch.h Sun Aug 19 14:21:37 2012 +0300
+++ b/src/imap/imap-fetch.h Sun Aug 19 16:17:32 2012 +0300
@@ -97,17 +97,12 @@
const char *nil_reply,
imap_fetch_handler_t *handler, void *context)
ATTR_NULL(3, 5);
-#ifdef CONTEXT_TYPE_SAFETY
-# define imap_fetch_add_handler(ctx, flags, nil_reply, handler, context) \
- ({(void)(1 ? 0 : handler((struct imap_fetch_context *)NULL, \
- (struct mail *)NULL, context)); \
- imap_fetch_add_handler(ctx, flags, nil_reply, \
- (imap_fetch_handler_t *)handler, context); })
-#else
-# define imap_fetch_add_handler(ctx, flags, nil_reply, handler, context) \
- imap_fetch_add_handler(ctx, flags, nil_reply, \
+#define imap_fetch_add_handler(ctx, flags, nil_reply, handler, context) \
+ imap_fetch_add_handler(ctx, flags, nil_reply + \
+ CALLBACK_TYPECHECK(handler, int (*)( \
+ struct imap_fetch_context *, struct mail *, \
+ typeof(context))), \
(imap_fetch_handler_t *)handler, context)
-#endif
int imap_fetch_att_list_parse(struct client *client, pool_t pool,
const struct imap_arg *list,
diff -r a097ef0a9d6d -r d3db2ba15d00 src/indexer/indexer-client.c
--- a/src/indexer/indexer-client.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/indexer/indexer-client.c Sun Aug 19 16:17:32 2012 +0300
@@ -147,9 +147,8 @@
}
}
-static void indexer_client_input(void *context)
+static void indexer_client_input(struct indexer_client *client)
{
- struct indexer_client *client = context;
const char *line, *const *args, *error;
switch (i_stream_read(client->input)) {
diff -r a097ef0a9d6d -r d3db2ba15d00 src/lib-dns/dns-lookup.c
--- a/src/lib-dns/dns-lookup.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/lib-dns/dns-lookup.c Sun Aug 19 16:17:32 2012 +0300
@@ -121,8 +121,8 @@
#undef dns_lookup
int dns_lookup(const char *host, const struct dns_lookup_settings *set,
- struct dns_lookup **lookup_r,
- dns_lookup_callback_t *callback, void *context)
+ dns_lookup_callback_t *callback, void *context,
+ struct dns_lookup **lookup_r)
{
struct dns_lookup *lookup;
struct dns_lookup_result result;
diff -r a097ef0a9d6d -r d3db2ba15d00 src/lib-dns/dns-lookup.h
--- a/src/lib-dns/dns-lookup.h Sun Aug 19 14:21:37 2012 +0300
+++ b/src/lib-dns/dns-lookup.h Sun Aug 19 16:17:32 2012 +0300
@@ -29,12 +29,13 @@
When failing with -1, the callback is called before returning from the
function. */
int dns_lookup(const char *host, const struct dns_lookup_settings *set,
- struct dns_lookup **lookup_r,
- dns_lookup_callback_t *callback, void *context) ATTR_NULL(5);
+ dns_lookup_callback_t *callback, void *context,
+ struct dns_lookup **lookup_r) ATTR_NULL(4);
#define dns_lookup(host, set, callback, context, lookup_r) \
- CONTEXT_CALLBACK2(dns_lookup, dns_lookup_callback_t, \
- callback, const struct dns_lookup_result *, \
- context, host, set, lookup_r)
+ dns_lookup(host + \
+ CALLBACK_TYPECHECK(callback, void (*)( \
+ const struct dns_lookup_result *, typeof(context))), \
+ set, (dns_lookup_callback_t *)callback, context, lookup_r)
/* Abort the DNS lookup without calling the callback. */
void dns_lookup_abort(struct dns_lookup **lookup);
diff -r a097ef0a9d6d -r d3db2ba15d00 src/lib-imap-storage/imap-msgpart.c
--- a/src/lib-imap-storage/imap-msgpart.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/lib-imap-storage/imap-msgpart.c Sun Aug 19 16:17:32 2012 +0300
@@ -339,14 +339,16 @@
HEADER_FILTER_INCLUDE |
HEADER_FILTER_HIDE_BODY,
hdr_fields, hdr_count,
- null_header_filter_callback, NULL);
+ *null_header_filter_callback,
+ (void *)NULL);
} else {
i_assert(msgpart->fetch_type == FETCH_HEADER_FIELDS_NOT);
input = i_stream_create_header_filter(mail_input,
HEADER_FILTER_EXCLUDE |
HEADER_FILTER_HIDE_BODY,
hdr_fields, hdr_count,
- null_header_filter_callback, NULL);
+ *null_header_filter_callback,
+ (void *)NULL);
}
if (message_get_header_size(input, hdr_size_r, &has_nuls) < 0) {
diff -r a097ef0a9d6d -r d3db2ba15d00 src/lib-index/mail-index-util.c
--- a/src/lib-index/mail-index-util.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/lib-index/mail-index-util.c Sun Aug 19 16:17:32 2012 +0300
@@ -103,23 +103,17 @@
return 0;
}
-static int mail_index_seq_record_cmp(const void *key, const void *data)
+static int mail_index_seq_record_cmp(const uint32_t *key_seq,
+ const uint32_t *data_seq)
{
- const uint32_t *seq_p = key;
- const uint32_t *data_seq = data;
-
- return *seq_p - *data_seq;
+ return *key_seq - *data_seq;
}
bool mail_index_seq_array_lookup(const ARRAY_TYPE(seq_array) *array,
uint32_t seq, unsigned int *idx_r)
{
- const void *base;
- unsigned int count;
-
- base = array_get(array, &count);
- return bsearch_insert_pos(&seq, base, count, array->arr.element_size,
- mail_index_seq_record_cmp, idx_r);
+ return array_bsearch_insert_pos(array, &seq,
+ mail_index_seq_record_cmp, idx_r);
}
bool mail_index_seq_array_add(ARRAY_TYPE(seq_array) *array, uint32_t seq,
diff -r a097ef0a9d6d -r d3db2ba15d00 src/lib-lda/mail-send.c
--- a/src/lib-lda/mail-send.c Sun Aug 19 14:21:37 2012 +0300
+++ b/src/lib-lda/mail-send.c Sun Aug 19 16:17:32 2012 +0300
@@ -169,7 +169,7 @@
HEADER_FILTER_EXCLUDE | HEADER_FILTER_NO_CR |
HEADER_FILTER_HIDE_BODY, exclude_headers,
N_ELEMENTS(exclude_headers),
- null_header_filter_callback, NULL);
+ *null_header_filter_callback, (void *)NULL);
ret = o_stream_send_istream(output, input);
i_stream_unref(&input);
@@ -207,7 +207,8 @@
input = i_stream_create_header_filter(input, HEADER_FILTER_EXCLUDE |
HEADER_FILTER_NO_CR, hide_headers,
N_ELEMENTS(hide_headers),
- null_header_filter_callback, NULL);
More information about the dovecot-cvs
mailing list