const char *const *name;
const char **sorted_headers, **dest_name;
pool_t pool;
- unsigned int i, count;
+ unsigned int i, j, count;
i_assert(*headers != NULL);
/* @UNSAFE */
fields = t_new(struct mail_cache_field, count);
- for (i = 0; i < count; i++) {
+ for (i = j = 0; i < count; i++) {
+ if (i > 0 && strcasecmp(headers[i-1], headers[i]) == 0)
+ continue;
header_field.name = t_strconcat("hdr.", headers[i], NULL);
- fields[i] = header_field;
+ fields[j++] = header_field;
}
+ count = j;
mail_cache_register_fields(box->cache, fields, count);
pool = pool_alloconly_create("mailbox_header_lookup_ctx", 1024);
dest_name = p_new(pool, const char *, count + 1);
for (i = 0; i < count; i++) {
ctx->idx[i] = fields[i].idx;
- dest_name[i] = p_strdup(pool, headers[i]);
+ dest_name[i] = p_strdup(pool, fields[i].name + strlen("hdr."));
}
ctx->name = dest_name;
return ctx;