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