changeset 8304:ab22ace44190 HEAD

Maildir: Added more strict asserts.
author Timo Sirainen <tss@iki.fi>
date Sun, 19 Oct 2008 14:46:13 +0300
parents d3b37327936e
children e4d0ce4d3420
files src/lib-storage/index/maildir/maildir-uidlist.c
diffstat 1 files changed, 16 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Sun Oct 19 14:38:09 2008 +0300
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Sun Oct 19 14:46:13 2008 +0300
@@ -346,18 +346,20 @@
 	mhdr->uidlist_size = st->st_size;
 }
 
-static void
+static unsigned int
 maildir_uidlist_records_array_delete(struct maildir_uidlist *uidlist,
 				     struct maildir_uidlist_rec *rec)
 {
 	struct maildir_uidlist_rec *const *recs, *const *pos;
-	unsigned int count;
+	unsigned int idx, count;
 
 	recs = array_get(&uidlist->records, &count);
 	pos = bsearch(&rec, recs, count, sizeof(*recs), maildir_uid_cmp);
 	i_assert(pos != NULL);
 
-	array_delete(&uidlist->records, pos - recs, 1);
+	idx = pos - recs;
+	array_delete(&uidlist->records, idx, 1);
+	return idx;
 }
 
 static bool
@@ -1462,24 +1464,25 @@
 				 const char *filename)
 {
 	struct maildir_uidlist_rec *rec;
+	unsigned int idx;
 
 	i_assert(ctx->partial);
 
-	if (ctx->first_unwritten_pos != (unsigned int)-1) {
-		i_assert(ctx->first_unwritten_pos > 0);
-		ctx->first_unwritten_pos--;
-	}
-	if (ctx->first_nouid_pos != (unsigned int)-1) {
-		i_assert(ctx->first_nouid_pos > 0);
-		ctx->first_nouid_pos--;
-	}
-
 	rec = hash_lookup(ctx->uidlist->files, filename);
 	i_assert(rec != NULL);
 	i_assert(rec->uid != (uint32_t)-1);
 
 	hash_remove(ctx->uidlist->files, filename);
-	maildir_uidlist_records_array_delete(ctx->uidlist, rec);
+	idx = maildir_uidlist_records_array_delete(ctx->uidlist, rec);
+
+	if (ctx->first_unwritten_pos != (unsigned int)-1) {
+		i_assert(ctx->first_unwritten_pos > idx);
+		ctx->first_unwritten_pos--;
+	}
+	if (ctx->first_nouid_pos != (unsigned int)-1) {
+		i_assert(ctx->first_nouid_pos > idx);
+		ctx->first_nouid_pos--;
+	}
 
 	ctx->changed = TRUE;
 	ctx->uidlist->recreate = TRUE;