From: Timo Sirainen Date: Sun, 19 Oct 2008 11:46:13 +0000 (+0300) Subject: Maildir: Added more strict asserts. X-Git-Tag: 1.2.alpha3~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc40ce1dda503f114e9505c2da9371fd3cb34096;p=thirdparty%2Fdovecot%2Fcore.git Maildir: Added more strict asserts. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/maildir/maildir-uidlist.c b/src/lib-storage/index/maildir/maildir-uidlist.c index 1b9b3f2b11..01040779f4 100644 --- a/src/lib-storage/index/maildir/maildir-uidlist.c +++ b/src/lib-storage/index/maildir/maildir-uidlist.c @@ -346,18 +346,20 @@ static void maildir_uidlist_update_hdr(struct maildir_uidlist *uidlist, 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,25 +1464,26 @@ void maildir_uidlist_sync_remove(struct maildir_uidlist_sync_ctx *ctx, const char *filename) { struct maildir_uidlist_rec *rec; + unsigned int idx; i_assert(ctx->partial); + rec = hash_lookup(ctx->uidlist->files, filename); + i_assert(rec != NULL); + i_assert(rec->uid != (uint32_t)-1); + + hash_remove(ctx->uidlist->files, filename); + idx = maildir_uidlist_records_array_delete(ctx->uidlist, rec); + if (ctx->first_unwritten_pos != (unsigned int)-1) { - i_assert(ctx->first_unwritten_pos > 0); + 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 > 0); + i_assert(ctx->first_nouid_pos > idx); 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); - ctx->changed = TRUE; ctx->uidlist->recreate = TRUE; }