dovecot: Added mail_index_ext_lookup()

dovecot at dovecot.org dovecot at dovecot.org
Sat Nov 3 22:33:24 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/90196328bcce
changeset: 6679:90196328bcce
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Nov 03 22:32:33 2007 +0200
description:
Added mail_index_ext_lookup()

diffstat:

2 files changed, 26 insertions(+), 11 deletions(-)
src/lib-index/mail-index.c |   34 +++++++++++++++++++++++-----------
src/lib-index/mail-index.h |    3 +++

diffs (70 lines):

diff -r 6601ee607b6f -r 90196328bcce src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Sat Nov 03 22:32:21 2007 +0200
+++ b/src/lib-index/mail-index.c	Sat Nov 03 22:32:33 2007 +0200
@@ -87,30 +87,42 @@ uint32_t mail_index_ext_register(struct 
 				 uint16_t default_record_size,
 				 uint16_t default_record_align)
 {
-        const struct mail_index_registered_ext *extensions;
 	struct mail_index_registered_ext rext;
-	unsigned int i, ext_count;
+	uint32_t ext_id;
 
 	if (strcmp(name, str_sanitize(name, -1)) != 0)
 		i_panic("mail_index_ext_register(%s): Invalid name", name);
 
-	extensions = array_get(&index->extensions, &ext_count);
-
-	/* see if it's already there */
-	for (i = 0; i < ext_count; i++) {
-		if (strcmp(extensions[i].name, name) == 0)
-			return i;
-	}
+	if (mail_index_ext_lookup(index, name, &ext_id))
+		return ext_id;
 
 	memset(&rext, 0, sizeof(rext));
 	rext.name = p_strdup(index->extension_pool, name);
-	rext.index_idx = ext_count;
+	rext.index_idx = array_count(&index->extensions);
 	rext.hdr_size = default_hdr_size;
 	rext.record_size = default_record_size;
 	rext.record_align = default_record_align;
 
 	array_append(&index->extensions, &rext, 1);
-	return ext_count;
+	return rext.index_idx;
+}
+
+bool mail_index_ext_lookup(struct mail_index *index, const char *name,
+			   uint32_t *ext_id_r)
+{
+        const struct mail_index_registered_ext *extensions;
+	unsigned int i, count;
+
+	extensions = array_get(&index->extensions, &count);
+	for (i = 0; i < count; i++) {
+		if (strcmp(extensions[i].name, name) == 0) {
+			*ext_id_r = i;
+			return TRUE;
+		}
+	}
+
+	*ext_id_r = (uint32_t)-1;
+	return FALSE;
 }
 
 void mail_index_register_expunge_handler(struct mail_index *index,
diff -r 6601ee607b6f -r 90196328bcce src/lib-index/mail-index.h
--- a/src/lib-index/mail-index.h	Sat Nov 03 22:32:21 2007 +0200
+++ b/src/lib-index/mail-index.h	Sat Nov 03 22:32:33 2007 +0200
@@ -407,6 +407,9 @@ uint32_t mail_index_ext_register(struct 
 				 uint32_t default_hdr_size,
 				 uint16_t default_record_size,
 				 uint16_t default_record_align);
+/* Returns TRUE and sets ext_id_r if extension with given name is registered. */
+bool mail_index_ext_lookup(struct mail_index *index, const char *name,
+			   uint32_t *ext_id_r);
 /* Resize existing extension data. If size is grown, the new data will be
    zero-filled. If size is shrinked, the data is simply dropped. */
 void mail_index_ext_resize(struct mail_index_transaction *t, uint32_t ext_id,


More information about the dovecot-cvs mailing list