changeset 21966:44eb00aedb43

lib-storage: Add mailbox_attribute_unregister_internal[s]() This allows plugins to unregister internal attributes when they're unloaded.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 20 Apr 2017 19:16:46 +0300
parents 8ec0f067fab1
children 040667a0b3be
files src/lib-storage/mailbox-attribute.c src/lib-storage/mailbox-attribute.h
diffstat 2 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mailbox-attribute.c	Thu Apr 13 15:13:19 2017 +0300
+++ b/src/lib-storage/mailbox-attribute.c	Thu Apr 20 19:16:46 2017 +0300
@@ -64,6 +64,29 @@
 		mailbox_attribute_register_internal(&iattrs[i]);
 }
 
+void mailbox_attribute_unregister_internal(
+	const struct mailbox_attribute_internal *iattr)
+{
+	unsigned int idx;
+
+	if (!array_bsearch_insert_pos(&mailbox_internal_attributes,
+				      iattr, mailbox_attribute_internal_cmp, &idx)) {
+		i_panic("mailbox_attribute_unregister_internal(%s): "
+			"key not found", iattr->key);
+	}
+
+	array_delete(&mailbox_internal_attributes, idx, 1);
+}
+
+void mailbox_attribute_unregister_internals(
+	const struct mailbox_attribute_internal *iattrs, unsigned int count)
+{
+	unsigned int i;
+
+	for (i = 0; i < count; i++)
+		mailbox_attribute_unregister_internal(&iattrs[i]);
+}
+
 static const struct mailbox_attribute_internal *
 mailbox_internal_attribute_get(enum mail_attribute_type type,
 			       const char *key)
--- a/src/lib-storage/mailbox-attribute.h	Thu Apr 13 15:13:19 2017 +0300
+++ b/src/lib-storage/mailbox-attribute.h	Thu Apr 20 19:16:46 2017 +0300
@@ -256,6 +256,11 @@
 void mailbox_attribute_register_internals(
 	const struct mailbox_attribute_internal *iattrs, unsigned int count);
 
+void mailbox_attribute_unregister_internal(
+	const struct mailbox_attribute_internal *iattr);
+void mailbox_attribute_unregister_internals(
+	const struct mailbox_attribute_internal *iattrs, unsigned int count);
+
 /*
  * Attribute API
  */