From: Timo Sirainen Date: Mon, 24 May 2004 03:03:03 +0000 (+0300) Subject: uidvalidity/uidnext fixes X-Git-Tag: 1.1.alpha1~4052 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fcfd317f7eb1f0216764c75c5fab3555020552d4;p=thirdparty%2Fdovecot%2Fcore.git uidvalidity/uidnext fixes --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/mbox/mbox-sync-parse.c b/src/lib-storage/index/mbox/mbox-sync-parse.c index 0a8299806d..f5bbcdb549 100644 --- a/src/lib-storage/index/mbox/mbox-sync-parse.c +++ b/src/lib-storage/index/mbox/mbox-sync-parse.c @@ -102,11 +102,6 @@ static int parse_x_imap_base(struct mbox_sync_mail_context *ctx, return FALSE; } - if (pos == hdr->full_value_len) - return TRUE; - - // FIXME: save keywords - if (ctx->sync_ctx->base_uid_validity == 0) { ctx->sync_ctx->base_uid_validity = uid_validity; ctx->sync_ctx->base_uid_last = uid_last; @@ -115,6 +110,12 @@ static int parse_x_imap_base(struct mbox_sync_mail_context *ctx, ctx->hdr_pos[MBOX_HDR_X_IMAPBASE] = str_len(ctx->header); ctx->seen_imapbase = TRUE; + + if (pos == hdr->full_value_len) + return TRUE; + + // FIXME: save keywords + return TRUE; } diff --git a/src/lib-storage/index/mbox/mbox-sync.c b/src/lib-storage/index/mbox/mbox-sync.c index a821ff7153..1f0ecfe125 100644 --- a/src/lib-storage/index/mbox/mbox-sync.c +++ b/src/lib-storage/index/mbox/mbox-sync.c @@ -225,7 +225,9 @@ static int mbox_sync_do(struct index_mailbox *ibox, ret = -1; break; } - sync_ctx.base_uid_validity = hdr->uid_validity; + sync_ctx.base_uid_validity = + hdr->uid_validity == 0 ? (uint32_t)ioloop_time : + hdr->uid_validity; } if ((mail_ctx.need_rewrite || @@ -392,6 +394,19 @@ static int mbox_sync_do(struct index_mailbox *ibox, if (mail_index_get_header(sync_view, &hdr) < 0) ret = -1; + + if (sync_ctx.base_uid_validity != hdr->uid_validity) { + mail_index_update_header(t, + offsetof(struct mail_index_header, uid_validity), + &sync_ctx.base_uid_validity, + sizeof(sync_ctx.base_uid_validity)); + } + if (sync_ctx.next_uid != hdr->next_uid) { + mail_index_update_header(t, + offsetof(struct mail_index_header, next_uid), + &sync_ctx.next_uid, sizeof(sync_ctx.next_uid)); + } + if ((uint32_t)st.st_mtime != hdr->sync_stamp) { uint32_t sync_stamp = st.st_mtime;