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,