mail-index-sync-keywords.c revision 5f5870385cff47efd2f58e7892f251cf13761528
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/* Copyright (c) 2004-2012 Dovecot authors, see the included COPYING file */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomikeyword_lookup(struct mail_index_sync_map_ctx *ctx,
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi const unsigned int *idx_map;
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi mail_index_keyword_lookup(ctx->view->index, keyword_name,
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* FIXME: slow. maybe create index -> file mapping as well */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi idx_map = array_get(&map->keyword_idx_map, &count);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi for (i = 0; i < count; i++) {
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomikeywords_get_header_buf(struct mail_index_map *map,
bcab95c672604588f1645e4a52e43f52ee567593Timo Sirainen unsigned int new_count, unsigned int *keywords_count_r,
bcab95c672604588f1645e4a52e43f52ee567593Timo Sirainen size_t *rec_offset_r, size_t *name_offset_root_r,
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi const struct mail_index_keyword_header_rec *kw_rec;
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi const char *name;
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi kw_hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi name = (const char *)(kw_rec + kw_hdr->keywords_count);
bcab95c672604588f1645e4a52e43f52ee567593Timo Sirainen i_assert((size_t)(name - (const char *)kw_hdr) < ext->hdr_size);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi offset = kw_rec[kw_hdr->keywords_count-1].name_offset;
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi buf = buffer_create_dynamic(pool_datastack_create(), 512);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi buffer_append(buf, &new_kw_hdr, sizeof(new_kw_hdr));
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi buffer_append(buf, kw_rec, sizeof(*kw_rec) * kw_hdr->keywords_count);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi buffer_write(buf, buf->used + sizeof(*kw_rec) * new_count,
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomistatic void keywords_ext_register(struct mail_index_sync_map_ctx *ctx,
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi unsigned char ext_intro_data[sizeof(*u) +
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi buffer_create_data(&ext_intro_buf, ext_intro_data,
u->record_size++;
u->name_size);
unsigned int keywords_count;
&ext_map_idx))
&name_offset);
name_offset = 0;
&ext_map_idx))
i_unreached();
unsigned int data_offset;
switch (type) {
case MODIFY_ADD:
case MODIFY_REMOVE:
i_unreached();
const char *keyword_name;
unsigned int keyword_idx;
int ret;
&ext_map_idx))
i_unreached();
&ext_map_idx))
i_unreached();
if (ret <= 0)
return ret;
const struct mail_transaction_keyword_reset *r)
&ext_map_idx)) {
for (; r != end; r++) {