mail-cache-compress.c revision e34d170f8f0e084bd94bfbc1a7085ece67e508df
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (c) 2003-2012 Dovecot authors, see the included COPYING file */
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainenmail_cache_merge_bitmask(struct mail_cache_copy_context *ctx,
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen unsigned char *dest;
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen unsigned int i, *pos;
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen pos = array_idx_modifiable(&ctx->bitmask_pos, field->field_idx);
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen if (*pos == 0) {
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen /* we decided to drop this field */
4ded3d18fa391ae5908f9834f1390cf55e8c99d5Timo Sirainen dest = buffer_get_space_unsafe(ctx->buffer, *pos, field->size);
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen dest[i] |= ((const unsigned char*)field->data)[i];
ba153863e55d75a7c2f28c9c010a905b8887b62bTimo Sirainenmail_cache_compress_field(struct mail_cache_copy_context *ctx,
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen file_field_idx = ctx->field_file_map[field->field_idx];
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen cache_field = &ctx->cache->fields[field->field_idx].field;
7b9f0c6aba07358e5520dc60c058126a4cae4056Timo Sirainen field_seen = buffer_get_space_unsafe(ctx->field_seen,
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen /* duplicate */
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen if (cache_field->type == MAIL_CACHE_FIELD_BITMASK)
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen dec = cache_field->decision & ~MAIL_CACHE_DECISION_FORCED;
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen buffer_append(ctx->buffer, &file_field_idx, sizeof(file_field_idx));
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen if (cache_field->field_size == (unsigned int)-1) {
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen buffer_append(ctx->buffer, &size32, sizeof(size32));
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen if (cache_field->type == MAIL_CACHE_FIELD_BITMASK) {
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen /* remember the position in case we need to update it */
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen array_idx_set(&ctx->bitmask_pos, field->field_idx, &pos);
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen buffer_append(ctx->buffer, field->data, field->size);
static uint32_t
unsigned int used_fields_count)
unsigned int i, j, idx;
for (i = 0; i < orig_fields_count; i++)
used_fields_count = i;
ext_offset = 0;
sizeof(cache_rec));
if (ret >= 0) {
if (ret == 0)
bool *unlock)
unsigned int i, count;
if (ret < 0)
if (*unlock) {
for (i = 0; i < count; i++) {
if (offsets[i] != 0) {
if (*unlock) {
int ret;
FALSE);
if (unlock) {
return ret;