changeset 3231:f778bd8b228f HEAD

Changed keywords_buf to array. Added mail_index_sync_get_keywords().
author Timo Sirainen <tss@iki.fi>
date Sun, 27 Mar 2005 15:22:21 +0300
parents b85a96766a15
children 8508869ab276
files src/lib-index/mail-index-private.h src/lib-index/mail-index-sync.c src/lib-index/mail-index-transaction.c src/lib-index/mail-index.c src/lib-index/mail-index.h
diffstat 5 files changed, 25 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-private.h	Sun Mar 27 14:25:47 2005 +0300
+++ b/src/lib-index/mail-index-private.h	Sun Mar 27 15:22:21 2005 +0300
@@ -139,7 +139,7 @@
 	uoff_t sync_log_file_offset;
 
 	pool_t keywords_pool;
-	buffer_t *keywords_buf;
+	array_t ARRAY_DEFINE(keywords_arr, const char *);
 	const char *const *keywords;
 
 	uint32_t keywords_ext_id;
--- a/src/lib-index/mail-index-sync.c	Sun Mar 27 14:25:47 2005 +0300
+++ b/src/lib-index/mail-index-sync.c	Sun Mar 27 15:22:21 2005 +0300
@@ -624,6 +624,13 @@
 	mail_index_sync_end(ctx);
 }
 
+const char *const *const *
+mail_index_sync_get_keywords(struct mail_index_sync_ctx *ctx)
+{
+	return &ctx->index->keywords;
+}
+
+
 void mail_index_sync_flags_apply(const struct mail_index_sync_rec *sync_rec,
 				 uint8_t *flags)
 {
--- a/src/lib-index/mail-index-transaction.c	Sun Mar 27 14:25:47 2005 +0300
+++ b/src/lib-index/mail-index-transaction.c	Sun Mar 27 15:22:21 2005 +0300
@@ -835,7 +835,6 @@
 	struct mail_keywords *k;
 	const char **missing_keywords, *keyword;
 	unsigned int count, i, j, k_pos = 0, missing_count = 0;
-	size_t size;
 
 	if (keywords == NULL) {
 		k = i_new(struct mail_keywords, 1);
@@ -868,21 +867,20 @@
 
 	if (missing_count > 0) {
 		/* add missing keywords. first drop the trailing NULL. */
-		size = index->keywords_buf->used - sizeof(const char *);
-		buffer_set_used_size(index->keywords_buf, size);
+		array_delete(&index->keywords_arr,
+			     array_count(&index->keywords_arr) - 1, 1);
 
-		j = size / sizeof(const char *);
+		j = array_count(&index->keywords_arr);
 		for (; *missing_keywords != NULL; missing_keywords++, j++) {
 			keyword = p_strdup(index->keywords_pool,
 					   *missing_keywords);
-			buffer_append(index->keywords_buf,
-				      &keyword, sizeof(keyword));
+			array_append(&index->keywords_arr, &keyword, 1);
 
 			k->idx[k_pos++] = j;
 		}
 
-		buffer_append_zero(index->keywords_buf, sizeof(const char *));
-		index->keywords = index->keywords_buf->data;
+		(void)array_modifyable_append(&index->keywords_arr);
+		index->keywords = array_idx(&index->keywords_arr, 0);
 	}
 	i_assert(k_pos == count);
 
--- a/src/lib-index/mail-index.c	Sun Mar 27 14:25:47 2005 +0300
+++ b/src/lib-index/mail-index.c	Sun Mar 27 15:22:21 2005 +0300
@@ -43,9 +43,10 @@
 	index->keywords_ext_id =
 		mail_index_ext_register(index, "keywords", 128, 2, 1);
 	index->keywords_pool = pool_alloconly_create("keywords", 512);
-	index->keywords_buf = buffer_create_dynamic(default_pool, 64);
-	buffer_append_zero(index->keywords_buf, sizeof(const char *));
-	index->keywords = index->keywords_buf->data;
+	ARRAY_CREATE(&index->keywords_arr, default_pool,
+		     const char *, 16);
+	(void)array_modifyable_append(&index->keywords_arr);
+	index->keywords = array_idx(&index->keywords_arr, 0);
 	return index;
 }
 
@@ -58,7 +59,7 @@
 	array_free(&index->sync_handlers);
 	array_free(&index->sync_lost_handlers);
 	array_free(&index->expunge_handlers);
-	buffer_free(index->keywords_buf);
+	array_free(&index->keywords_arr);
 
 	i_free(index->error);
 	i_free(index->dir);
--- a/src/lib-index/mail-index.h	Sun Mar 27 14:25:47 2005 +0300
+++ b/src/lib-index/mail-index.h	Sun Mar 27 15:22:21 2005 +0300
@@ -291,7 +291,7 @@
 				   enum modify_type modify_type,
 				   enum mail_flags flags);
 
-/* Return a list of all existing keywords, or NULL if there is none. */
+/* Return a NULL-terminated list of all existing keywords. */
 const char *const *mail_index_get_keywords(struct mail_index *index);
 /* Create a keyword list structure. It's freed automatically at the end of
    the transaction. */
@@ -317,6 +317,11 @@
 /* Reset the error message. */
 void mail_index_reset_error(struct mail_index *index);
 
+/* Return a pointer to NULL-terminated list of keywords which are referenced
+   in mail_index_sync_rec->keyword_idx. Note tat the pointer may change after
+   calling mail_index_keywords_create(). */
+const char *const *const *
+mail_index_sync_get_keywords(struct mail_index_sync_ctx *ctx);
 /* Apply changes in MAIL_INDEX_SYNC_TYPE_FLAGS typed sync records to given
    flags variables. */
 void mail_index_sync_flags_apply(const struct mail_index_sync_rec *sync_rec,