From: Timo Sirainen Date: Mon, 13 Jul 2009 17:16:45 +0000 (-0400) Subject: Moved mail_index_keywords_*() to mail-index.c. X-Git-Tag: 2.0.alpha1~439 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3f2ad7b8c3a243dabcba469c8a331423d036f3fc;p=thirdparty%2Fdovecot%2Fcore.git Moved mail_index_keywords_*() to mail-index.c. --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-index-transaction.c b/src/lib-index/mail-index-transaction.c index 6542a4eea3..a0e0dc6b21 100644 --- a/src/lib-index/mail-index-transaction.c +++ b/src/lib-index/mail-index-transaction.c @@ -1094,96 +1094,6 @@ int mail_index_atomic_inc_ext(struct mail_index_transaction *t, return diff32; } -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) -{ - struct mail_keywords *k; - const unsigned int *indexes; - unsigned int src, dest, i, count; - - indexes = array_get(keyword_indexes, &count); - 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; - - /* copy but skip duplicates */ - for (src = dest = 0; src < count; src++) { - for (i = 0; i < src; i++) { - if (k->idx[i] == indexes[src]) - break; - } - if (i == src) - k->idx[dest++] = indexes[src]; - } - k->count = dest; - return k; -} - -void mail_index_keywords_ref(struct mail_keywords *keywords) -{ - keywords->refcount++; -} - -void mail_index_keywords_unref(struct mail_keywords **_keywords) -{ - struct mail_keywords *keywords = *_keywords; - - i_assert(keywords->refcount > 0); - - *_keywords = NULL; - if (--keywords->refcount == 0) - i_free(keywords); -} - static bool keyword_update_has_changes(struct mail_index_transaction *t, uint32_t seq, enum modify_type modify_type, diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 9774759fc1..6f65871879 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -258,6 +258,58 @@ const ARRAY_TYPE(keywords) *mail_index_get_keywords(struct mail_index *index) return &index->keywords; } +struct mail_keywords * +mail_index_keywords_create_from_indexes(struct mail_index *index, + const ARRAY_TYPE(keyword_indexes) + *keyword_indexes) +{ + struct mail_keywords *k; + const unsigned int *indexes; + unsigned int src, dest, i, count; + + indexes = array_get(keyword_indexes, &count); + 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; + + /* copy but skip duplicates */ + for (src = dest = 0; src < count; src++) { + for (i = 0; i < src; i++) { + if (k->idx[i] == indexes[src]) + break; + } + if (i == src) + k->idx[dest++] = indexes[src]; + } + k->count = dest; + return k; +} + +void mail_index_keywords_ref(struct mail_keywords *keywords) +{ + keywords->refcount++; +} + +void mail_index_keywords_unref(struct mail_keywords **_keywords) +{ + struct mail_keywords *keywords = *_keywords; + + i_assert(keywords->refcount > 0); + + *_keywords = NULL; + if (--keywords->refcount == 0) + i_free(keywords); +} + int mail_index_try_open_only(struct mail_index *index) { i_assert(index->fd == -1);