dovecot-1.1: Maildir: Added more strict asserts.
dovecot at dovecot.org
dovecot at dovecot.org
Sun Oct 19 14:46:00 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/79982b41b3ed
changeset: 7956:79982b41b3ed
user: Timo Sirainen <tss at iki.fi>
date: Sun Oct 19 14:45:56 2008 +0300
description:
Maildir: Added more strict asserts.
diffstat:
1 file changed, 16 insertions(+), 13 deletions(-)
src/lib-storage/index/maildir/maildir-uidlist.c | 29 ++++++++++++-----------
diffs (63 lines):
diff -r a27f3c202961 -r 79982b41b3ed src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Sun Oct 19 14:37:40 2008 +0300
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sun Oct 19 14:45:56 2008 +0300
@@ -346,18 +346,20 @@ static void maildir_uidlist_update_hdr(s
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 @@ void maildir_uidlist_sync_remove(struct
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;
More information about the dovecot-cvs
mailing list