Mercurial > dovecot > original-hg > dovecot-1.2
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,