dovecot: Removed autocreate parameter from mail_index_keyword_lo...

dovecot at dovecot.org dovecot at dovecot.org
Sat Sep 1 00:36:06 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/a1c587d3d633
changeset: 6335:a1c587d3d633
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Aug 31 22:58:25 2007 +0300
description:
Removed autocreate parameter from mail_index_keyword_lookup(). Added a new
mail_index_keyword_lookup_or_create().

diffstat:

7 files changed, 30 insertions(+), 27 deletions(-)
src/lib-index/mail-index-sync-keywords.c         |    2 -
src/lib-index/mail-index-transaction.c           |    4 +--
src/lib-index/mail-index.c                       |   27 +++++++++++++---------
src/lib-index/mail-index.h                       |    9 ++++---
src/lib-storage/index/dbox/dbox-keywords.c       |    4 +--
src/lib-storage/index/maildir/maildir-keywords.c |    4 ---
src/lib-storage/index/mbox/mbox-sync-parse.c     |    7 ++---

diffs (162 lines):

diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-index/mail-index-sync-keywords.c
--- a/src/lib-index/mail-index-sync-keywords.c	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-index/mail-index-sync-keywords.c	Fri Aug 31 22:58:25 2007 +0300
@@ -21,7 +21,7 @@ keyword_lookup(struct mail_index_sync_ma
 	}
 	if (array_is_created(&map->keyword_idx_map) &&
 	    mail_index_keyword_lookup(ctx->view->index, keyword_name,
-				      FALSE, &keyword_idx)) {
+				      &keyword_idx)) {
 		/* FIXME: slow. maybe create index -> file mapping as well */
 		idx_map = array_get(&map->keyword_idx_map, &count);
 		for (i = 0; i < count; i++) {
diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-index/mail-index-transaction.c
--- a/src/lib-index/mail-index-transaction.c	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-index/mail-index-transaction.c	Fri Aug 31 22:58:25 2007 +0300
@@ -1087,8 +1087,8 @@ mail_index_keywords_create(struct mail_i
 	/* look up the keywords from index. they're never removed from there
 	   so we can permanently store indexes to them. */
 	for (i = 0; i < count; i++) {
-		(void)mail_index_keyword_lookup(index, keywords[i],
-						TRUE, &k->idx[i]);
+		mail_index_keyword_lookup_or_create(index, keywords[i],
+						    &k->idx[i]);
 	}
 	return k;
 }
diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-index/mail-index.c	Fri Aug 31 22:58:25 2007 +0300
@@ -182,10 +182,8 @@ void mail_index_unregister_sync_lost_han
 }
 
 bool mail_index_keyword_lookup(struct mail_index *index,
-			       const char *keyword, bool autocreate,
-			       unsigned int *idx_r)
-{
-	char *keyword_dup;
+			       const char *keyword, unsigned int *idx_r)
+{
 	void *value;
 
 	/* keywords_hash keeps a name => index mapping of keywords.
@@ -196,17 +194,24 @@ bool mail_index_keyword_lookup(struct ma
 		return TRUE;
 	}
 
-	if (!autocreate) {
-		*idx_r = (unsigned int)-1;
-		return FALSE;
-	}
+	*idx_r = (unsigned int)-1;
+	return FALSE;
+}
+
+void mail_index_keyword_lookup_or_create(struct mail_index *index,
+					 const char *keyword,
+					 unsigned int *idx_r)
+{
+	char *keyword_dup;
+
+	if (mail_index_keyword_lookup(index, keyword, idx_r))
+		return;
 
 	keyword = keyword_dup = p_strdup(index->keywords_pool, keyword);
 	*idx_r = array_count(&index->keywords);
 
 	hash_insert(index->keywords_hash, keyword_dup, POINTER_CAST(*idx_r));
 	array_append(&index->keywords, &keyword, 1);
-	return TRUE;
 }
 
 int mail_index_map_parse_keywords(struct mail_index_map *map)
@@ -294,7 +299,7 @@ int mail_index_map_parse_keywords(struct
 		unsigned int idx;
 
 		old_idx = array_idx(&map->keyword_idx_map, i);
-		if (!mail_index_keyword_lookup(index, keyword, FALSE, &idx) ||
+		if (!mail_index_keyword_lookup(index, keyword, &idx) ||
 		    idx != *old_idx) {
 			mail_index_set_error(index, "Corrupted index file %s: "
 					     "Keywords changed unexpectedly",
@@ -315,7 +320,7 @@ int mail_index_map_parse_keywords(struct
 				index->filepath);
 			return -1;
 		}
-		(void)mail_index_keyword_lookup(index, keyword, TRUE, &idx);
+		mail_index_keyword_lookup_or_create(index, keyword, &idx);
 		array_append(&map->keyword_idx_map, &idx, 1);
 	}
 	return 0;
diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-index/mail-index.h
--- a/src/lib-index/mail-index.h	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-index/mail-index.h	Fri Aug 31 22:58:25 2007 +0300
@@ -348,11 +348,12 @@ void mail_index_update_flags_range(struc
    only when UIDVALIDITY changes. */
 void mail_index_reset(struct mail_index_transaction *t);
 
-/* Lookup a keyword, returns TRUE if found, FALSE if not. If autocreate is
-   TRUE, the keyword is automatically created and TRUE is always returned. */
+/* Lookup a keyword, returns TRUE if found, FALSE if not. */
 bool mail_index_keyword_lookup(struct mail_index *index,
-			       const char *keyword, bool autocreate,
-			       unsigned int *idx_r);
+			       const char *keyword, unsigned int *idx_r);
+void mail_index_keyword_lookup_or_create(struct mail_index *index,
+					 const char *keyword,
+					 unsigned int *idx_r);
 /* Return a pointer to array of NULL-terminated list of keywords. Note that
    the array contents (and thus pointers inside it) may change after calling
    mail_index_keywords_create() or mail_index_sync_begin(). */
diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-storage/index/dbox/dbox-keywords.c
--- a/src/lib-storage/index/dbox/dbox-keywords.c	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-storage/index/dbox/dbox-keywords.c	Fri Aug 31 22:58:25 2007 +0300
@@ -52,8 +52,8 @@ int dbox_file_read_keywords(struct dbox_
 		last_offset = file->input->v_offset;
 
 		/* set up map record for the keyword */
-		(void)mail_index_keyword_lookup(mbox->ibox.index, line, TRUE,
-						&kw.index_idx);
+		mail_index_keyword_lookup_or_create(mbox->ibox.index, line,
+						    &kw.index_idx);
 		kw.file_idx = idx;
 
 		/* look up the position where to insert it */
diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-storage/index/maildir/maildir-keywords.c
--- a/src/lib-storage/index/maildir/maildir-keywords.c	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-keywords.c	Fri Aug 31 22:58:25 2007 +0300
@@ -409,9 +409,7 @@ unsigned int maildir_keywords_char_idx(s
                 maildir_keywords_create(ctx->mk, name, chridx);
 	}
 
-	if (!mail_index_keyword_lookup(ctx->index, name, TRUE, &idx))
-		i_unreached();
-
+	mail_index_keyword_lookup_or_create(ctx->index, name, &idx);
         ctx->chridx_to_idx[chridx] = idx;
 	return idx;
 }
diff -r e6d16b1b5e81 -r a1c587d3d633 src/lib-storage/index/mbox/mbox-sync-parse.c
--- a/src/lib-storage/index/mbox/mbox-sync-parse.c	Fri Aug 31 21:26:53 2007 +0300
+++ b/src/lib-storage/index/mbox/mbox-sync-parse.c	Fri Aug 31 22:58:25 2007 +0300
@@ -149,9 +149,8 @@ parse_imap_keywords_list(struct mbox_syn
 		keyword = t_strndup(hdr->full_value + keyword_start,
 				    pos - keyword_start);
 		if (keyword_is_valid(keyword)) {
-			(void)mail_index_keyword_lookup(
-				ctx->sync_ctx->mbox->ibox.index,
-				keyword, TRUE, &idx);
+			mail_index_keyword_lookup_or_create(
+				ctx->sync_ctx->mbox->ibox.index, keyword, &idx);
 		}
 		t_pop();
 
@@ -292,7 +291,7 @@ static bool parse_x_keywords(struct mbox
 		str_append_n(keyword, hdr->full_value + keyword_start,
 			     pos - keyword_start);
 		if (!mail_index_keyword_lookup(ctx->sync_ctx->mbox->ibox.index,
-					       str_c(keyword), FALSE, &idx)) {
+					       str_c(keyword), &idx)) {
 			/* keyword wasn't found. that means the sent mail
 			   originally contained X-Keywords header. Delete it. */
 			t_pop();


More information about the dovecot-cvs mailing list