Mercurial > dovecot > original-hg > dovecot-1.2
changeset 2249:cb4dad60f6cd HEAD
Several fixes for updating mbox. Recent changes also made it corrupt
headers.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 29 Jun 2004 00:32:29 +0300 |
parents | 8eaf078488d2 |
children | 7b70a60c0f9d |
files | src/lib-storage/index/mbox/mbox-sync-parse.c src/lib-storage/index/mbox/mbox-sync-private.h src/lib-storage/index/mbox/mbox-sync-rewrite.c src/lib-storage/index/mbox/mbox-sync-update.c |
diffstat | 4 files changed, 18 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/mbox/mbox-sync-parse.c Tue Jun 29 00:31:10 2004 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync-parse.c Tue Jun 29 00:32:29 2004 +0300 @@ -398,9 +398,12 @@ func = header_func_find(hdr->name); if (func != NULL) { - if (hdr->continues) + if (hdr->continues) { hdr->use_full_value = TRUE; - else if (!func->func(ctx, hdr)) { + continue; + } + + if (!func->func(ctx, hdr)) { /* this header is broken, remove it */ ctx->need_rewrite = TRUE; str_truncate(ctx->header, line_start_pos);
--- a/src/lib-storage/index/mbox/mbox-sync-private.h Tue Jun 29 00:31:10 2004 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync-private.h Tue Jun 29 00:32:29 2004 +0300 @@ -120,5 +120,7 @@ int mbox_sync_seek(struct mbox_sync_context *sync_ctx, uoff_t from_offset); int mbox_move(struct mbox_sync_context *sync_ctx, uoff_t dest, uoff_t source, uoff_t size); +void mbox_sync_move_buffer(struct mbox_sync_mail_context *ctx, + size_t pos, size_t need, size_t have); #endif
--- a/src/lib-storage/index/mbox/mbox-sync-rewrite.c Tue Jun 29 00:31:10 2004 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync-rewrite.c Tue Jun 29 00:32:29 2004 +0300 @@ -148,7 +148,7 @@ if (data_size - start_pos <= *size) { /* remove it all */ - str_delete(ctx->header, start_pos, data_size - start_pos); + mbox_sync_move_buffer(ctx, start_pos, 0, data_size - start_pos); *size -= data_size - start_pos; return; } @@ -156,7 +156,7 @@ /* we have more space than needed. since we're removing from the beginning of header instead of end, we don't have to worry about multiline-headers. */ - str_delete(ctx->header, start_pos, *size); + mbox_sync_move_buffer(ctx, start_pos, 0, *size); if (last_line_pos <= start_pos + *size) last_line_pos = start_pos; else
--- a/src/lib-storage/index/mbox/mbox-sync-update.c Tue Jun 29 00:31:10 2004 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync-update.c Tue Jun 29 00:32:29 2004 +0300 @@ -17,8 +17,8 @@ } } -static void mbox_sync_move_buffer(struct mbox_sync_mail_context *ctx, - size_t pos, size_t need, size_t have) +void mbox_sync_move_buffer(struct mbox_sync_mail_context *ctx, + size_t pos, size_t need, size_t have) { ssize_t diff = (ssize_t)need - (ssize_t)have; int i; @@ -126,8 +126,9 @@ ctx->sync_ctx->hdr->uid_validity; } + str_append(ctx->header, "X-IMAPbase: "); ctx->hdr_pos[MBOX_HDR_X_IMAPBASE] = str_len(ctx->header); - str_printfa(ctx->header, "X-IMAPbase: %u %010u", + str_printfa(ctx->header, "%u %010u", ctx->sync_ctx->base_uid_validity, ctx->sync_ctx->next_uid-1); //FIXME:keywords_append(ctx, all_keywords); @@ -135,24 +136,25 @@ } if (ctx->hdr_pos[MBOX_HDR_X_UID] == (size_t)-1) { + str_append(ctx->header, "X-UID: "); ctx->hdr_pos[MBOX_HDR_X_UID] = str_len(ctx->header); - str_printfa(ctx->header, "X-UID: %u\n", ctx->mail.uid); + str_printfa(ctx->header, "%u\n", ctx->mail.uid); } if (ctx->hdr_pos[MBOX_HDR_STATUS] == (size_t)-1 && (ctx->mail.flags & STATUS_FLAGS_MASK) != 0) { if (!ctx->sync_ctx->ibox->keep_recent) ctx->mail.flags |= MBOX_NONRECENT; + str_append(ctx->header, "Status: "); ctx->hdr_pos[MBOX_HDR_STATUS] = str_len(ctx->header); - str_append(ctx->header, "Status: "); status_flags_append(ctx, mbox_status_flags); str_append_c(ctx->header, '\n'); } if (ctx->hdr_pos[MBOX_HDR_X_STATUS] == (size_t)-1 && (ctx->mail.flags & XSTATUS_FLAGS_MASK) != 0) { + str_append(ctx->header, "X-Status: "); ctx->hdr_pos[MBOX_HDR_X_STATUS] = str_len(ctx->header); - str_append(ctx->header, "X-Status: "); status_flags_append(ctx, mbox_xstatus_flags); str_append_c(ctx->header, '\n'); } @@ -166,8 +168,8 @@ } if (ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] == (size_t)-1 && have_keywords) { + str_append(ctx->header, "X-Keywords: "); ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] = str_len(ctx->header); - str_append(ctx->header, "X-Keywords: "); keywords_append(ctx, ctx->mail.keywords); str_append_c(ctx->header, '\n'); }