From: Timo Sirainen Date: Tue, 17 Jun 2008 10:59:47 +0000 (+0300) Subject: mail_index_record_map_move_to_private(): Drop messages from record_map the X-Git-Tag: 1.2.alpha1~280 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d0ab5936be1cd971007fc2241e0be120c442cb84;p=thirdparty%2Fdovecot%2Fcore.git mail_index_record_map_move_to_private(): Drop messages from record_map the map hasn't itself seen yet. --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-index-map.c b/src/lib-index/mail-index-map.c index 1019ba76f0..27a231448a 100644 --- a/src/lib-index/mail-index-map.c +++ b/src/lib-index/mail-index-map.c @@ -1134,16 +1134,29 @@ struct mail_index_map *mail_index_map_clone(const struct mail_index_map *map) void mail_index_record_map_move_to_private(struct mail_index_map *map) { struct mail_index_record_map *new_map; + const struct mail_index_record *rec; - if (array_count(&map->rec_map->maps) == 1) - return; - - new_map = mail_index_record_map_alloc(map); - mail_index_map_copy_records(new_map, map->rec_map, - map->hdr.record_size); + if (array_count(&map->rec_map->maps) > 1) { + new_map = mail_index_record_map_alloc(map); + mail_index_map_copy_records(new_map, map->rec_map, + map->hdr.record_size); + mail_index_record_map_unlink(map); + map->rec_map = new_map; + } else { + new_map = map->rec_map; + } - mail_index_record_map_unlink(map); - map->rec_map = new_map; + if (new_map->records_count != map->hdr.messages_count) { + new_map->records_count = map->hdr.messages_count; + if (new_map->records_count == 0) + new_map->last_appended_uid = 0; + else { + rec = MAIL_INDEX_MAP_IDX(map, new_map->records_count-1); + new_map->last_appended_uid = rec->uid; + } + buffer_set_used_size(new_map->buffer, new_map->records_count * + map->hdr.record_size); + } } void mail_index_map_move_to_memory(struct mail_index_map *map)