[dovecot-cvs] dovecot/src/plugins/lazy-expunge lazy-expunge-plugin.c, 1.6, 1.7

tss at dovecot.org tss at dovecot.org
Thu Mar 29 14:51:14 EEST 2007


Update of /var/lib/cvs/dovecot/src/plugins/lazy-expunge
In directory talvi:/tmp/cvs-serv16171/plugins/lazy-expunge

Modified Files:
	lazy-expunge-plugin.c 
Log Message:
Better type safety to module_contexts arrays. Already fixed some bugs.



Index: lazy-expunge-plugin.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/plugins/lazy-expunge/lazy-expunge-plugin.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- lazy-expunge-plugin.c	29 Mar 2007 07:59:13 -0000	1.6
+++ lazy-expunge-plugin.c	29 Mar 2007 11:51:11 -0000	1.7
@@ -17,11 +17,9 @@
 #include <time.h>
 
 #define LAZY_EXPUNGE_CONTEXT(obj) \
-	*((void **)array_idx_modifiable(&(obj)->module_contexts, \
-					lazy_expunge_storage_module_id))
+	MODULE_CONTEXT(obj, lazy_expunge_mail_storage_module)
 #define LAZY_EXPUNGE_LIST_CONTEXT(obj) \
-	*((void **)array_idx_modifiable(&(obj)->module_contexts, \
-					lazy_expunge_mailbox_list_module_id))
+	MODULE_CONTEXT(obj, lazy_expunge_mailbox_list_module)
 
 enum lazy_namespace {
 	LAZY_NAMESPACE_EXPUNGE,
@@ -32,29 +30,24 @@
 };
 
 struct lazy_expunge_mailbox_list {
-	struct mailbox_list_vfuncs super;
+	union mailbox_list_module_context module_ctx;
 
 	struct mail_storage *storage;
 };
 
 struct lazy_expunge_mail_storage {
-	struct mail_storage_vfuncs super;
-	bool internal_namespace;
-};
+	union mail_storage_module_context module_ctx;
 
-struct lazy_expunge_mailbox {
-	struct mailbox_vfuncs super;
+	bool internal_namespace;
 };
 
 struct lazy_expunge_transaction {
+	union mailbox_transaction_module_context module_ctx;
+
 	ARRAY_TYPE(seq_range) expunge_seqs;
 	struct mailbox *expunge_box;
 };
 
-struct lazy_expunge_mail {
-	struct mail_vfuncs super;
-};
-
 const char *lazy_expunge_plugin_version = PACKAGE_VERSION;
 
 static void (*lazy_expunge_next_hook_client_created)(struct client **client);
@@ -63,11 +56,12 @@
 static void (*lazy_expunge_next_hook_mailbox_list_created)
 	(struct mailbox_list *list);
 
-static unsigned int lazy_expunge_storage_module_id = 0;
-static bool lazy_expunge_storage_module_id_set = FALSE;
-
-static unsigned int lazy_expunge_mailbox_list_module_id = 0;
-static bool lazy_expunge_mailbox_list_module_id_set = FALSE;
+static MODULE_CONTEXT_DEFINE_INIT(lazy_expunge_mail_storage_module,
+				  &mail_storage_module_register);
+static MODULE_CONTEXT_DEFINE_INIT(lazy_expunge_mail_module,
+				  &mail_module_register);
+static MODULE_CONTEXT_DEFINE_INIT(lazy_expunge_mailbox_list_module,
+				  &mailbox_list_module_register);
 
 static struct namespace *lazy_namespaces[LAZY_NAMESPACE_COUNT];
 
@@ -122,14 +116,14 @@
 lazy_expunge_transaction_begin(struct mailbox *box,
 			       enum mailbox_transaction_flags flags)
 {
-	struct lazy_expunge_mailbox *qbox = LAZY_EXPUNGE_CONTEXT(box);
+	union mailbox_module_context *mbox = LAZY_EXPUNGE_CONTEXT(box);
 	struct mailbox_transaction_context *t;
 	struct lazy_expunge_transaction *lt;
 
-	t = qbox->super.transaction_begin(box, flags);
+	t = mbox->super.transaction_begin(box, flags);
 	lt = i_new(struct lazy_expunge_transaction, 1);
 
-	array_idx_set(&t->module_contexts, lazy_expunge_storage_module_id, &lt);
+	MODULE_CONTEXT_SET(t, lazy_expunge_mail_storage_module, lt);
 	return t;
 }
 
@@ -218,12 +212,12 @@
 lazy_expunge_transaction_commit(struct mailbox_transaction_context *ctx,
 				enum mailbox_sync_flags flags)
 {
-	struct lazy_expunge_mailbox *qbox = LAZY_EXPUNGE_CONTEXT(ctx->box);
+	union mailbox_module_context *mbox = LAZY_EXPUNGE_CONTEXT(ctx->box);
 	struct lazy_expunge_transaction *lt = LAZY_EXPUNGE_CONTEXT(ctx);
 	struct mailbox *srcbox = ctx->box;
 	int ret;
 
-	ret = qbox->super.transaction_commit(ctx, flags);
+	ret = mbox->super.transaction_commit(ctx, flags);
 
 	if (ret == 0 && array_is_created(&lt->expunge_seqs))
 		ret = lazy_expunge_move_expunges(srcbox, lt);
@@ -235,10 +229,10 @@
 static void
 lazy_expunge_transaction_rollback(struct mailbox_transaction_context *ctx)
 {
-	struct lazy_expunge_mailbox *qbox = LAZY_EXPUNGE_CONTEXT(ctx->box);
+	union mailbox_module_context *mbox = LAZY_EXPUNGE_CONTEXT(ctx->box);
 	struct lazy_expunge_transaction *lt = LAZY_EXPUNGE_CONTEXT(ctx);
 
-	qbox->super.transaction_rollback(ctx);
+	mbox->super.transaction_rollback(ctx);
 	lazy_expunge_transaction_free(lt);
 }
 
@@ -247,20 +241,19 @@
 			enum mail_fetch_field wanted_fields,
 			struct mailbox_header_lookup_ctx *wanted_headers)
 {
-	struct lazy_expunge_mailbox *qbox = LAZY_EXPUNGE_CONTEXT(t->box);
-	struct lazy_expunge_mail *lmail;
+	union mailbox_module_context *mbox = LAZY_EXPUNGE_CONTEXT(t->box);
+	union mail_module_context *mmail;
 	struct mail *_mail;
 	struct mail_private *mail;
 
-	_mail = qbox->super.mail_alloc(t, wanted_fields, wanted_headers);
+	_mail = mbox->super.mail_alloc(t, wanted_fields, wanted_headers);
 	mail = (struct mail_private *)_mail;
 
-	lmail = p_new(mail->pool, struct lazy_expunge_mail, 1);
-	lmail->super = mail->v;
+	mmail = p_new(mail->pool, union mail_module_context, 1);
+	mmail->super = mail->v;
 
 	mail->v.expunge = lazy_expunge_mail_expunge;
-	array_idx_set(&mail->module_contexts,
-		      lazy_expunge_storage_module_id, &lmail);
+	MODULE_CONTEXT_SET_SELF(mail, lazy_expunge_mail_module, mmail);
 	return _mail;
 }
 
@@ -271,21 +264,21 @@
 	struct lazy_expunge_mail_storage *lstorage =
 		LAZY_EXPUNGE_CONTEXT(storage);
 	struct mailbox *box;
-	struct lazy_expunge_mailbox *qbox;
+	union mailbox_module_context *mbox;
 
-	box = lstorage->super.mailbox_open(storage, name, input, flags);
+	box = lstorage->module_ctx.super.
+		mailbox_open(storage, name, input, flags);
 	if (box == NULL || lstorage->internal_namespace)
 		return box;
 
-	qbox = p_new(box->pool, struct lazy_expunge_mailbox, 1);
-	qbox->super = box->v;
+	mbox = p_new(box->pool, union mailbox_module_context, 1);
+	mbox->super = box->v;
 
 	box->v.transaction_begin = lazy_expunge_transaction_begin;
 	box->v.transaction_commit = lazy_expunge_transaction_commit;
 	box->v.transaction_rollback = lazy_expunge_transaction_rollback;
 	box->v.mail_alloc = lazy_expunge_mail_alloc;
-	array_idx_set(&box->module_contexts,
-		      lazy_expunge_storage_module_id, &qbox);
+	MODULE_CONTEXT_SET_SELF(box, lazy_expunge_mail_storage_module, mbox);
 	return box;
 }
 
@@ -423,12 +416,12 @@
 
 	if (llist->storage == NULL) {
 		/* not a maildir storage */
-		return llist->super.delete_mailbox(list, name);
+		return llist->module_ctx.super.delete_mailbox(list, name);
 	}
 
 	lstorage = LAZY_EXPUNGE_CONTEXT(llist->storage);
 	if (lstorage->internal_namespace)
-		return llist->super.delete_mailbox(list, name);
+		return llist->module_ctx.super.delete_mailbox(list, name);
 
 	/* first do the normal sanity checks */
 	if (strcmp(name, "INBOX") == 0) {
@@ -483,16 +476,10 @@
 	llist->storage = storage;
 
 	lstorage = p_new(storage->pool, struct lazy_expunge_mail_storage, 1);
-	lstorage->super = storage->v;
+	lstorage->module_ctx.super = storage->v;
 	storage->v.mailbox_open = lazy_expunge_mailbox_open;
 
-	if (!lazy_expunge_storage_module_id_set) {
-		lazy_expunge_storage_module_id = mail_storage_module_id++;
-		lazy_expunge_storage_module_id_set = TRUE;
-	}
-
-	array_idx_set(&storage->module_contexts,
-		      lazy_expunge_storage_module_id, &lstorage);
+	MODULE_CONTEXT_SET(storage, lazy_expunge_mail_storage_module, lstorage);
 }
 
 static void lazy_expunge_mailbox_list_created(struct mailbox_list *list)
@@ -503,16 +490,10 @@
 		lazy_expunge_next_hook_mailbox_list_created(list);
 
 	llist = p_new(list->pool, struct lazy_expunge_mailbox_list, 1);
-	llist->super = list->v;
+	llist->module_ctx.super = list->v;
 	list->v.delete_mailbox = lazy_expunge_mailbox_list_delete;
 
-	if (!lazy_expunge_mailbox_list_module_id_set) {
-		lazy_expunge_mailbox_list_module_id = mailbox_list_module_id++;
-		lazy_expunge_mailbox_list_module_id_set = TRUE;
-	}
-
-	array_idx_set(&list->module_contexts,
-		      lazy_expunge_mailbox_list_module_id, &llist);
+	MODULE_CONTEXT_SET(list, lazy_expunge_mailbox_list_module, llist);
 }
 
 static void lazy_expunge_hook_client_created(struct client **client)



More information about the dovecot-cvs mailing list