mbox-save.c revision 75b15d874cb202a03d7197f75c056afb68221a90
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye uint32_t seq, next_uid, uid_validity, first_saved_uid;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyestatic int write_error(struct mbox_save_context *ctx)
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyestatic int mbox_seek_to_end(struct mbox_save_context *ctx, uoff_t *offset)
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye return mbox_set_syscall_error(ctx->mbox, "fstat()");
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye return mbox_set_syscall_error(ctx->mbox, "lseek()");
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye return mbox_set_syscall_error(ctx->mbox, "read()");
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyestatic int mbox_append_lf(struct mbox_save_context *ctx)
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyestatic int write_from_line(struct mbox_save_context *ctx, time_t received_date,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye const char *line;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye from_envelope = t_strconcat(storage->user->username,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye /* save in local timezone, no matter what it was given with */
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye line = mbox_from_create(from_envelope, received_date);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye if ((ret = o_stream_send_str(ctx->output, line)) < 0)
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyestatic int mbox_write_content_length(struct mbox_save_context *ctx)
const char *str;
const char *const *keyword_names;
for (i = 0; i < count; i++) {
int ret;
if (ret < 0)
FALSE);
void *randbuf;
static struct istream *
MAIL_STORAGE_FLAG_KEEP_HEADER_MD5) != 0) {
const char *hdr;
T_BEGIN {
} T_END;
return ret;
struct mail_save_context *
(struct mbox_transaction_context *)t;
return t->save_ctx;
struct mbox_transaction_context *t =
0, NULL);
const unsigned char *data;
if (size > 0) {
if (ret == 0)
const char *linefeed =
const unsigned char *data;
for (i = 0; i < size; i++) {
if (i != size) {
if (ret == 0)
T_BEGIN {
} T_END;
int ret = 0;
if (ret == 0) {
if (ret < 0)
return ret;