[dovecot-cvs] dovecot/src/lib-storage/index/maildir
maildir-uidlist.c, 1.9, 1.10
cras at procontrol.fi
cras at procontrol.fi
Tue May 4 00:08:06 EEST 2004
Update of /home/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv18955/lib-storage/index/maildir
Modified Files:
maildir-uidlist.c
Log Message:
and yet more syncing fixes..
Index: maildir-uidlist.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- maildir-uidlist.c 3 May 2004 19:38:28 -0000 1.9
+++ maildir-uidlist.c 3 May 2004 21:08:04 -0000 1.10
@@ -54,9 +54,9 @@
struct hash_table *files;
unsigned int first_new_pos;
+ unsigned int new_files_count;
unsigned int partial:1;
- unsigned int new_files:1;
unsigned int synced:1;
unsigned int failed:1;
};
@@ -597,15 +597,16 @@
}
if (rec == NULL) {
- if (!ctx->new_files) {
- ctx->new_files = TRUE;
+ if (ctx->new_files_count == 0) {
ctx->first_new_pos =
buffer_get_used_size(uidlist->record_buf) /
sizeof(rec);
}
+ ctx->new_files_count++;
rec = p_new(uidlist->record_pool,
struct maildir_uidlist_rec, 1);
+ rec->uid = (uint32_t)-1;
buffer_append(uidlist->record_buf, &rec, sizeof(rec));
}
@@ -656,11 +657,9 @@
if (old_rec != NULL)
*rec = *old_rec;
- else if (!ctx->new_files) {
- ctx->new_files = TRUE;
- ctx->first_new_pos =
- buffer_get_used_size(ctx->record_buf) /
- sizeof(rec);
+ else {
+ rec->uid = (uint32_t)-1;
+ ctx->new_files_count++;
}
buffer_append(ctx->record_buf, &rec, sizeof(rec));
@@ -710,7 +709,7 @@
qsort(rec_p + first_new_pos, size - first_new_pos,
sizeof(*rec_p), maildir_time_cmp);
for (dest = first_new_pos; dest < size; dest++) {
- i_assert(rec_p[dest]->uid == 0);
+ i_assert(rec_p[dest]->uid == (uint32_t)-1);
rec_p[dest]->uid = uidlist->next_uid++;
rec_p[dest]->flags &= ~MAILDIR_UIDLIST_REC_FLAG_MOVED;
@@ -737,8 +736,6 @@
/* buffer is unsorted, sort it by UID up to beginning of new messages */
rec_p = buffer_get_modifyable_data(ctx->record_buf, &size);
size /= sizeof(*rec_p);
- if (ctx->new_files)
- size = ctx->first_new_pos;
qsort(rec_p, size, sizeof(*rec_p), maildir_uid_cmp);
buffer_free(uidlist->record_buf);
@@ -754,8 +751,10 @@
uidlist->record_pool = ctx->record_pool;
ctx->record_pool = NULL;
- if (ctx->new_files)
- maildir_uidlist_assign_uids(uidlist, ctx->first_new_pos);
+ if (ctx->new_files_count != 0) {
+ maildir_uidlist_assign_uids(uidlist,
+ size - ctx->new_files_count);
+ }
}
int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx)
@@ -766,14 +765,14 @@
if (!ctx->partial)
maildir_uidlist_swap(ctx);
else {
- if (ctx->new_files) {
+ if (ctx->new_files_count != 0) {
maildir_uidlist_assign_uids(ctx->uidlist,
ctx->first_new_pos);
}
maildir_uidlist_mark_all(ctx->uidlist, FALSE);
}
- if (ctx->new_files && ret == 0)
+ if (ctx->new_files_count != 0 && ret == 0)
ret = maildir_uidlist_rewrite(ctx->uidlist);
if (UIDLIST_IS_LOCKED(ctx->uidlist))
More information about the dovecot-cvs
mailing list