Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4233:dd22380b0fc0 HEAD
Fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 27 Apr 2006 15:44:19 +0300 |
parents | 81ec8a2fbea9 |
children | c31d7c833d5c |
files | src/lib-storage/index/dbox/dbox-uidlist.c |
diffstat | 1 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-uidlist.c Thu Apr 27 15:33:21 2006 +0300 +++ b/src/lib-storage/index/dbox/dbox-uidlist.c Thu Apr 27 15:44:19 2006 +0300 @@ -165,6 +165,17 @@ return (int)*file_seq - (int)(*entry)->file_seq; } +static void dbox_uidlist_update_last_uid(struct dbox_uidlist *uidlist, + const struct dbox_uidlist_entry *entry) +{ + const struct seq_range *range; + unsigned int count; + + range = array_get(&entry->uid_list, &count); + if (range[count-1].seq2 > uidlist->last_uid) + uidlist->last_uid = range[count-1].seq2; +} + static bool dbox_uidlist_add_entry(struct dbox_uidlist *uidlist, const struct dbox_uidlist_entry *src_entry) { @@ -172,6 +183,8 @@ const struct seq_range *range; unsigned int i, idx, count; + dbox_uidlist_update_last_uid(uidlist, src_entry); + entries = array_get_modifyable(&uidlist->entries, &count); if (count == 0 || src_entry->file_seq > entries[count-1]->file_seq) { /* append new file sequence */ @@ -546,6 +559,7 @@ entries = array_get(&uidlist->entries, &count); for (i = 0; i < count; i++) { + i_assert(entries[i]->file_seq <= uidlist->last_file_seq); str_truncate(str, 0); i_assert(i == 0 || @@ -555,6 +569,7 @@ range = array_get(&entries[i]->uid_list, &range_count); i_assert(range_count != 0); for (ui = 0; ui < range_count; ui++) { + i_assert(range[ui].seq2 <= uidlist->last_uid); if (str_len(str) > 0) str_append_c(str, ','); if (range[ui].seq1 == range[ui].seq2) @@ -1253,6 +1268,10 @@ struct seq_range, array_count(&entry->uid_list) + 1); array_append_array(&new_entry->uid_list, &entry->uid_list); + if (new_entry->file_seq > ctx->uidlist->last_file_seq) + ctx->uidlist->last_file_seq = new_entry->file_seq; + dbox_uidlist_update_last_uid(ctx->uidlist, new_entry); + entries = array_get(&ctx->uidlist->entries, &count); if (count == 0 || entries[count-1]->file_seq < new_entry->file_seq) array_append(&ctx->uidlist->entries, &new_entry, 1);