cydir-save.c revision b66484774d4059fa10671cbc50b6489fa40b117f
/* Copyright (C) 2007 Timo Sirainen */
#include "lib.h"
#include "hostpid.h"
#include "istream.h"
#include "ostream.h"
#include "ostream-crlf.h"
#include "str.h"
#include "index-mail.h"
#include "cydir-storage.h"
#include "cydir-sync.h"
#include <stdio.h>
#include <utime.h>
struct cydir_save_context {
struct mail_save_context ctx;
struct cydir_mailbox *mbox;
struct mail_index_transaction *trans;
char *tmp_basename;
unsigned int mail_count;
struct cydir_sync_context *sync_ctx;
/* updated for each appended mail: */
int fd;
unsigned int failed:1;
unsigned int finished:1;
};
static char *cydir_generate_tmp_filename(void)
{
static unsigned int create_count;
return i_strdup_printf("%s.P%sQ%uM%s.%s",
create_count++,
}
static const char *
{
const char *dir;
}
const char *from_envelope __attr_unused__,
struct mail_save_context **ctx_r)
{
struct cydir_transaction_context *t =
(struct cydir_transaction_context *)_t;
enum mail_flags save_flags;
const char *path;
}
t_push();
"utime(%s) failed: %m", path);
/* ignore this error anyway */
}
}
} else {
"open(%s) failed: %m", path);
t_pop();
return -1;
}
t_pop();
/* add to index */
}
}
i_unreached();
}
{
return -1;
if (!mail_storage_set_error_from_errno(storage)) {
"o_stream_send_istream(%s) failed: %m",
}
return -1;
}
return 0;
}
{
"fsync(%s) failed: %m",
}
}
}
ctx->mail_count++;
}
{
(void)cydir_save_finish(_ctx);
}
{
struct cydir_transaction_context *t =
const struct mail_index_header *hdr;
const char *dir;
unsigned int src_prefixlen, dest_prefixlen;
return -1;
}
"rename(%s, %s) failed: %m",
return -1;
}
}
return 0;
}
{
}
{
}