dovecot-2.0: Previous commit accidentally removed mail_index_key...

dovecot at dovecot.org dovecot at dovecot.org
Mon Jul 13 20:20:28 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/d670b5d66302
changeset: 9614:d670b5d66302
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jul 13 13:19:32 2009 -0400
description:
Previous commit accidentally removed mail_index_keywords_create().

diffstat:

1 file changed, 38 insertions(+)
src/lib-index/mail-index.c |   38 ++++++++++++++++++++++++++++++++++++++

diffs (48 lines):

diff -r ed9b4bc28913 -r d670b5d66302 src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Mon Jul 13 13:16:45 2009 -0400
+++ b/src/lib-index/mail-index.c	Mon Jul 13 13:19:32 2009 -0400
@@ -259,6 +259,44 @@ const ARRAY_TYPE(keywords) *mail_index_g
 }
 
 struct mail_keywords *
+mail_index_keywords_create(struct mail_index *index,
+			   const char *const keywords[])
+{
+	struct mail_keywords *k;
+	unsigned int src, dest, i, count;
+
+	count = str_array_length(keywords);
+	if (count == 0) {
+		k = i_new(struct mail_keywords, 1);
+		k->index = index;
+		k->refcount = 1;
+		return k;
+	}
+
+	/* @UNSAFE */
+	k = i_malloc(sizeof(struct mail_keywords) +
+		     (sizeof(k->idx) * (count-1)));
+	k->index = index;
+	k->refcount = 1;
+
+	/* look up the keywords from index. they're never removed from there
+	   so we can permanently store indexes to them. */
+	for (src = dest = 0; src < count; src++) {
+		mail_index_keyword_lookup_or_create(index, keywords[src],
+						    &k->idx[dest]);
+		/* ignore if this is a duplicate */
+		for (i = 0; i < src; i++) {
+			if (k->idx[i] == k->idx[dest])
+				break;
+		}
+		if (i == src)
+			dest++;
+	}
+	k->count = dest;
+	return k;
+}
+
+struct mail_keywords *
 mail_index_keywords_create_from_indexes(struct mail_index *index,
 					const ARRAY_TYPE(keyword_indexes)
 						*keyword_indexes)


More information about the dovecot-cvs mailing list