changeset 6335:a1c587d3d633 HEAD

Removed autocreate parameter from mail_index_keyword_lookup(). Added a new mail_index_keyword_lookup_or_create().
author Timo Sirainen <tss@iki.fi>
date Fri, 31 Aug 2007 22:58:25 +0300
parents e6d16b1b5e81
children f2815306ccda
files src/lib-index/mail-index-sync-keywords.c src/lib-index/mail-index-transaction.c src/lib-index/mail-index.c src/lib-index/mail-index.h src/lib-storage/index/dbox/dbox-keywords.c src/lib-storage/index/maildir/maildir-keywords.c src/lib-storage/index/mbox/mbox-sync-parse.c
diffstat 7 files changed, 29 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
 	}
 	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++) {
--- 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 @@
 	/* 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;
 }
--- 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 @@
 }
 
 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)
 {
-	char *keyword_dup;
 	void *value;
 
 	/* keywords_hash keeps a name => index mapping of keywords.
@@ -196,17 +194,24 @@
 		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 @@
 		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 @@
 				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;
--- 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 @@
    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(). */
--- 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 @@
 		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 */
--- 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 @@
                 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;
 }
--- 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 @@
 		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 @@
 		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();