changeset 4226:83322a523c91 HEAD

More fixes.
author Timo Sirainen <tss@iki.fi>
date Thu, 27 Apr 2006 11:06:23 +0300
parents abdef9d86a94
children 9cf143e90327
files src/lib-storage/index/dbox/dbox-uidlist.c
diffstat 1 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-uidlist.c	Tue Apr 25 16:40:18 2006 +0300
+++ b/src/lib-storage/index/dbox/dbox-uidlist.c	Thu Apr 27 11:06:23 2006 +0300
@@ -58,7 +58,6 @@
 
 	pool_t entry_pool;
 	array_t ARRAY_DEFINE(entries, struct dbox_uidlist_entry *);
-	uint32_t entry_last_file_seq;
 
 	unsigned int appending:1;
 	unsigned int need_full_rewrite:1;
@@ -174,7 +173,7 @@
 	unsigned int i, idx, count;
 
 	entries = array_get_modifyable(&uidlist->entries, &count);
-	if (src_entry->file_seq > uidlist->entry_last_file_seq) {
+	if (count == 0 || src_entry->file_seq > entries[count-1]->file_seq) {
 		/* append new file sequence */
 		idx = count;
 	} else {
@@ -189,9 +188,12 @@
 		dest_entry = p_new(uidlist->entry_pool,
 				   struct dbox_uidlist_entry, 1);
 		*dest_entry = *src_entry;
+		i_assert(idx < count || idx == 0 ||
+			 src_entry->file_seq > entries[idx-1]->file_seq);
+		i_assert(idx == count ||
+			 src_entry->file_seq < entries[idx]->file_seq);
 		array_insert(&uidlist->entries, idx, &dest_entry, 1);
 
-		uidlist->entry_last_file_seq = src_entry->file_seq;
 		if (src_entry->file_seq > uidlist->last_file_seq)
                         uidlist->last_file_seq = src_entry->file_seq;
 	} else {
@@ -388,7 +390,6 @@
 		uidlist->uid_validity = uid_validity;
 		uidlist->last_uid = last_uid;
 		uidlist->last_file_seq = last_file_seq;
-		uidlist->entry_last_file_seq = 0;
 		p_clear(uidlist->entry_pool);
 		array_clear(&uidlist->entries);
 
@@ -547,6 +548,9 @@
 	for (i = 0; i < count; i++) {
 		str_truncate(str, 0);
 
+		i_assert(i == 0 ||
+			 entries[i]->file_seq > entries[i-1]->file_seq);
+
 		/* <uid list> <file seq> [<last write timestamp> <file size>] */
 		range = array_get(&entries[i]->uid_list, &range_count);
 		i_assert(range_count != 0);
@@ -1222,11 +1226,18 @@
 	if (count == 0 || entries[count-1]->file_seq < new_entry->file_seq)
 		array_append(&ctx->uidlist->entries, &new_entry, 1);
 	else {
+		unsigned int idx;
+
 		pos = bsearch_insert_pos(&new_entry->file_seq, entries,
 					 count, sizeof(*entries),
 					 dbox_uidlist_entry_cmp);
-		array_insert(&ctx->uidlist->entries, pos - entries,
-			     &new_entry, 1);
+		idx = pos - entries;
+
+		i_assert(idx < count || idx == 0 ||
+			 new_entry->file_seq > entries[idx-1]->file_seq);
+		i_assert(idx == count ||
+			 new_entry->file_seq < entries[idx]->file_seq);
+		array_insert(&ctx->uidlist->entries, idx, &new_entry, 1);
 	}
 }