mbox-save.c revision 2d23beeff60058ff85f0a15e7c27588ab62a1593
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (C) 2002 Timo Sirainen */
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen uoff_t extra_hdr_offset, eoh_offset, eoh_input_offset;
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainenstatic void write_error(struct mbox_save_context *ctx, int error)
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen mail_storage_set_error(STORAGE(ctx->mbox->storage),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen "Not enough disk space");
c46d97e6a26a5bacb40a1d817407b94ae3860bddTimo Sirainenstatic int mbox_seek_to_end(struct mbox_save_context *ctx, uoff_t *offset)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen return mbox_set_syscall_error(ctx->mbox, "fstat()");
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainen return mbox_set_syscall_error(ctx->mbox, "lseek()");
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen return mbox_set_syscall_error(ctx->mbox, "read()");
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschstatic int mbox_append_lf(struct mbox_save_context *ctx)
02c75e04c6ff80726bb59e3ea34a7995ad1f6f7cTimo Sirainen if (o_stream_send(ctx->output, "\n", 1) < 0) {
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic int write_from_line(struct mbox_save_context *ctx, time_t received_date,
383d0e8c24451468d6bea17e4b55d74de744abe6Timo Sirainen /* failed, use just the hostname */
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen strocpy(my_hostdomain, name, sizeof(my_hostdomain));
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen t_strconcat(INDEX_STORAGE(ctx->mbox->storage)->user,
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen /* save in local timezone, no matter what it was given with */
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen line = mbox_from_create(from_envelope, received_date);
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen if ((ret = o_stream_send_str(ctx->output, line)) < 0)
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainenstatic int mbox_write_content_length(struct mbox_save_context *ctx)
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen const char *str;
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen /* we can't seek, don't set Content-Length */
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen /* write Content-Length headers */
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen if (o_stream_seek(ctx->output, ctx->extra_hdr_offset +
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen mbox_set_syscall_error(ctx->mbox, "o_stream_seek()");
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen } else if (o_stream_send(ctx->output, str, len) < 0) {
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen if (o_stream_seek(ctx->output, end_offset) < 0) {
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen mbox_set_syscall_error(ctx->mbox, "o_stream_seek()");
704a96fa677763eef7ae62466e14e83a2f535427Timo Sirainenstatic void mbox_save_init_sync(struct mbox_transaction_context *t)
704a96fa677763eef7ae62466e14e83a2f535427Timo Sirainen struct mbox_mailbox *mbox = (struct mbox_mailbox *)t->ictx.ibox;
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen /* open a new view to get the header. this is required if we just
const char *const *keyword_names;
for (i = 0; i < count; i++) {
int ret;
if (!want_mail) {
if (ret < 0)
if (ret == 0)
0, FALSE);
struct mail_save_context *
struct mbox_transaction_context *t =
NULL);
ctx);
MAIL_STORAGE_FLAG_SAVE_CRLF) != 0 ?
const unsigned char *data;
if (ret == 0)
if (size > 0)
int ret = 0;
return ret;