Mercurial > dovecot > original-hg > dovecot-1.2
changeset 3817:dc560ef2654b HEAD
Moved expunge handlers to mail_index_registered_ext.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 06 Jan 2006 14:57:06 +0200 |
parents | 575c79a0aabc |
children | 6758c0f3c318 |
files | src/lib-index/mail-index-private.h src/lib-index/mail-index-sync-ext.c src/lib-index/mail-index.c |
diffstat | 3 files changed, 23 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-private.h Fri Jan 06 14:48:55 2006 +0200 +++ b/src/lib-index/mail-index-private.h Fri Jan 06 14:57:06 2006 +0200 @@ -91,7 +91,8 @@ uint16_t record_size; uint16_t record_align; - struct mail_index_sync_handler sync_handler; + struct mail_index_sync_handler sync_handler; + mail_index_expunge_handler_t *expunge_handler; }; struct mail_index_map { @@ -135,7 +136,6 @@ pool_t extension_pool; array_t ARRAY_DEFINE(extensions, struct mail_index_registered_ext); - array_t ARRAY_DEFINE(expunge_handlers, mail_index_expunge_handler_t *); array_t ARRAY_DEFINE(sync_lost_handlers, mail_index_sync_lost_handler_t *);
--- a/src/lib-index/mail-index-sync-ext.c Fri Jan 06 14:48:55 2006 +0200 +++ b/src/lib-index/mail-index-sync-ext.c Fri Jan 06 14:57:06 2006 +0200 @@ -11,25 +11,18 @@ void mail_index_sync_init_expunge_handlers(struct mail_index_sync_map_ctx *ctx) { - mail_index_expunge_handler_t *const *handlers; - const struct mail_index_ext *extensions; + const struct mail_index_ext *ext; + const struct mail_index_registered_ext *rext; const uint32_t *id_map; void **contexts; struct mail_index_expunge_handler eh; - unsigned int count, ext_count, id_map_count; - unsigned int handlers_count, context_count; + unsigned int ext_count, id_map_count; + unsigned int rext_count, context_count; uint32_t idx_ext_id, map_ext_id; if (!array_is_created(&ctx->view->map->extensions)) return; - handlers = array_get(&ctx->view->index->expunge_handlers, - &handlers_count); - - if (handlers_count == 0) - return; - - /* set expunge handlers */ memset(&eh, 0, sizeof(eh)); if (array_is_created(&ctx->expunge_handlers)) array_clear(&ctx->expunge_handlers); @@ -38,20 +31,23 @@ struct mail_index_expunge_handler, 64); } - extensions = array_get(&ctx->view->map->extensions, &ext_count); + rext = array_get(&ctx->view->index->extensions, &rext_count); + ext = array_get(&ctx->view->map->extensions, &ext_count); id_map = array_get(&ctx->view->map->ext_id_map, &id_map_count); contexts = array_get_modifyable(&ctx->extra_contexts, &context_count); - count = I_MIN(handlers_count, id_map_count); - for (idx_ext_id = 0; idx_ext_id < count; idx_ext_id++) { + i_assert(id_map_count <= rext_count); + + for (idx_ext_id = 0; idx_ext_id < id_map_count; idx_ext_id++) { map_ext_id = id_map[idx_ext_id]; - if (handlers[idx_ext_id] == NULL || map_ext_id == (uint32_t)-1) + if (rext[idx_ext_id].expunge_handler == NULL || + map_ext_id == (uint32_t)-1) continue; i_assert(map_ext_id < context_count); - eh.handler = handlers[idx_ext_id]; + eh.handler = rext[idx_ext_id].expunge_handler; eh.context = &contexts[map_ext_id]; - eh.record_offset = extensions[map_ext_id].record_offset; + eh.record_offset = ext[map_ext_id].record_offset; array_append(&ctx->expunge_handlers, &eh, 1); } ctx->expunge_handlers_set = TRUE;
--- a/src/lib-index/mail-index.c Fri Jan 06 14:48:55 2006 +0200 +++ b/src/lib-index/mail-index.c Fri Jan 06 14:57:06 2006 +0200 @@ -34,8 +34,6 @@ ARRAY_CREATE(&index->extensions, index->extension_pool, struct mail_index_registered_ext, 5); - ARRAY_CREATE(&index->expunge_handlers, default_pool, - mail_index_expunge_handler_t *, 4); ARRAY_CREATE(&index->sync_lost_handlers, default_pool, mail_index_sync_lost_handler_t *, 4); @@ -61,7 +59,6 @@ pool_unref(index->keywords_pool); array_free(&index->sync_lost_handlers); - array_free(&index->expunge_handlers); array_free(&index->keywords); i_free(index->error); @@ -109,23 +106,23 @@ uint32_t ext_id, mail_index_expunge_handler_t *cb) { - mail_index_expunge_handler_t **p; + struct mail_index_registered_ext *rext; - p = array_idx_modifyable(&index->expunge_handlers, ext_id); - i_assert(*p == NULL); + rext = array_idx_modifyable(&index->extensions, ext_id); + i_assert(rext->expunge_handler == NULL); - *p = cb; + rext->expunge_handler = cb; } void mail_index_unregister_expunge_handler(struct mail_index *index, uint32_t ext_id) { - mail_index_expunge_handler_t **p; + struct mail_index_registered_ext *rext; - p = array_idx_modifyable(&index->expunge_handlers, ext_id); - i_assert(*p != NULL); + rext = array_idx_modifyable(&index->extensions, ext_id); + i_assert(rext->expunge_handler != NULL); - *p = NULL; + rext->expunge_handler = NULL; } void mail_index_register_sync_handler(struct mail_index *index, uint32_t ext_id,