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;
}
/* 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
}
}
-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;
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);
}
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;
- ctx->hdr_pos[MBOX_HDR_STATUS] = str_len(ctx->header);
str_append(ctx->header, "Status: ");
+ ctx->hdr_pos[MBOX_HDR_STATUS] = str_len(ctx->header);
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) {
- ctx->hdr_pos[MBOX_HDR_X_STATUS] = str_len(ctx->header);
str_append(ctx->header, "X-Status: ");
+ ctx->hdr_pos[MBOX_HDR_X_STATUS] = str_len(ctx->header);
status_flags_append(ctx, mbox_xstatus_flags);
str_append_c(ctx->header, '\n');
}
}
if (ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] == (size_t)-1 && have_keywords) {
- ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] = str_len(ctx->header);
str_append(ctx->header, "X-Keywords: ");
+ ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] = str_len(ctx->header);
keywords_append(ctx, ctx->mail.keywords);
str_append_c(ctx->header, '\n');
}