[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-copy.c,
1.34, 1.35 maildir-mail.c, 1.13, 1.14 maildir-save.c, 1.49,
1.50 maildir-storage.c, 1.95, 1.96 maildir-storage.h, 1.35,
1.36 maildir-sync.c, 1.50, 1.51 maildir-transaction.c, 1.7,
1.8 maildir-uidlist.c, 1.35, 1.36 maildir-uidlist.h, 1.12,
1.13 maildir-util.c, 1.9, 1.10
cras at dovecot.org
cras at dovecot.org
Fri Apr 8 16:13:50 EEST 2005
- Previous message: [dovecot-cvs] dovecot/src/lib-storage/index index-storage.c, 1.73,
1.74 index-storage.h, 1.91, 1.92
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-file.c, 1.8,
1.9 mbox-file.h, 1.2, 1.3 mbox-lock.c, 1.14, 1.15 mbox-lock.h,
1.1, 1.2 mbox-mail.c, 1.25, 1.26 mbox-save.c, 1.79,
1.80 mbox-storage.c, 1.116, 1.117 mbox-storage.h, 1.36,
1.37 mbox-sync-parse.c, 1.38, 1.39 mbox-sync-private.h, 1.48,
1.49 mbox-sync-rewrite.c, 1.45, 1.46 mbox-sync-update.c, 1.32,
1.33 mbox-sync.c, 1.145, 1.146 mbox-transaction.c, 1.11, 1.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv23481/lib-storage/index/maildir
Modified Files:
maildir-copy.c maildir-mail.c maildir-save.c maildir-storage.c
maildir-storage.h maildir-sync.c maildir-transaction.c
maildir-uidlist.c maildir-uidlist.h maildir-util.c
Log Message:
Moved mbox/maildir-specific variables from struct index_mailbox to
mbox_mailbox and maildir_mailbox.
Index: maildir-copy.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-copy.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- maildir-copy.c 15 Mar 2005 19:01:52 -0000 1.34
+++ maildir-copy.c 8 Apr 2005 13:13:47 -0000 1.35
@@ -10,7 +10,7 @@
#include <unistd.h>
struct maildir_copy_context {
- struct index_mailbox *ibox;
+ struct maildir_mailbox *mbox;
int hardlink;
pool_t pool;
@@ -27,7 +27,7 @@
const char *fname;
};
-static int do_hardlink(struct index_mailbox *ibox, const char *path,
+static int do_hardlink(struct maildir_mailbox *mbox, const char *path,
void *context)
{
struct hardlink_ctx *ctx = context;
@@ -37,14 +37,14 @@
return 0;
if (ENOSPACE(errno)) {
- mail_storage_set_error(ibox->box.storage,
+ mail_storage_set_error(&mbox->storage->storage,
"Not enough disk space");
return -1;
}
if (errno == EACCES || errno == EXDEV)
return 1;
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"link(%s, %s) failed: %m",
path, ctx->dest_path);
return -1;
@@ -57,7 +57,8 @@
static int maildir_copy_hardlink(struct mail *mail,
struct maildir_copy_context *ctx)
{
- struct index_mail *imail = (struct index_mail *) mail;
+ struct index_mail *imail = (struct index_mail *)mail;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)imail->ibox;
struct hardlink_ctx do_ctx;
struct rollback *rb;
enum mail_flags flags;
@@ -71,9 +72,9 @@
memset(&do_ctx, 0, sizeof(do_ctx));
do_ctx.dest_path =
- t_strconcat(ctx->ibox->path, "/new/", dest_fname, NULL);
+ t_strconcat(ctx->mbox->path, "/new/", dest_fname, NULL);
- if (maildir_file_do(imail->ibox, imail->mail.mail.uid,
+ if (maildir_file_do(mbox, imail->mail.mail.uid,
do_hardlink, &do_ctx) < 0)
return -1;
@@ -89,7 +90,7 @@
}
static struct maildir_copy_context *
-maildir_copy_init(struct index_mailbox *ibox)
+maildir_copy_init(struct maildir_mailbox *mbox)
{
struct maildir_copy_context *ctx;
pool_t pool;
@@ -99,7 +100,7 @@
ctx = p_new(pool, struct maildir_copy_context, 1);
ctx->pool = pool;
ctx->hardlink = getenv("MAILDIR_COPY_WITH_HARDLINKS") != NULL;
- ctx->ibox = ibox;
+ ctx->mbox = mbox;
return ctx;
}
@@ -115,7 +116,7 @@
for (rb = ctx->rollbacks; rb != NULL; rb = rb->next) {
t_push();
- (void)unlink(t_strconcat(ctx->ibox->path,
+ (void)unlink(t_strconcat(ctx->mbox->path,
"/new/", rb->fname, NULL));
t_pop();
}
@@ -128,14 +129,16 @@
{
struct maildir_transaction_context *t =
(struct maildir_transaction_context *)_t;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
struct maildir_copy_context *ctx;
int ret;
if (t->copy_ctx == NULL)
- t->copy_ctx = maildir_copy_init(t->ictx.ibox);
+ t->copy_ctx = maildir_copy_init(mbox);
ctx = t->copy_ctx;
- if (ctx->hardlink && mail->box->storage == ctx->ibox->box.storage) {
+ if (ctx->hardlink &&
+ mail->box->storage == &ctx->mbox->storage->storage) {
// FIXME: handle dest_mail
t_push();
ret = maildir_copy_hardlink(mail, ctx);
Index: maildir-mail.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-mail.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- maildir-mail.c 29 Mar 2005 16:48:47 -0000 1.13
+++ maildir-mail.c 8 Apr 2005 13:13:47 -0000 1.14
@@ -10,7 +10,8 @@
#include <unistd.h>
#include <sys/stat.h>
-static int do_open(struct index_mailbox *ibox, const char *path, void *context)
+static int
+do_open(struct maildir_mailbox *mbox, const char *path, void *context)
{
int *fd = context;
@@ -20,12 +21,13 @@
if (errno == ENOENT)
return 0;
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"open(%s) failed: %m", path);
return -1;
}
-static int do_stat(struct index_mailbox *ibox, const char *path, void *context)
+static int
+do_stat(struct maildir_mailbox *mbox, const char *path, void *context)
{
struct stat *st = context;
@@ -34,20 +36,20 @@
if (errno == ENOENT)
return 0;
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"stat(%s) failed: %m", path);
return -1;
}
static struct istream *
-maildir_open_mail(struct index_mailbox *ibox, uint32_t uid, int *deleted)
+maildir_open_mail(struct maildir_mailbox *mbox, uint32_t uid, int *deleted)
{
int fd;
*deleted = FALSE;
fd = -1;
- if (maildir_file_do(ibox, uid, do_open, &fd) < 0)
+ if (maildir_file_do(mbox, uid, do_open, &fd) < 0)
return NULL;
if (fd == -1) {
@@ -55,7 +57,7 @@
return NULL;
}
- if (ibox->mail_read_mmaped) {
+ if (mbox->ibox.mail_read_mmaped) {
return i_stream_create_mmap(fd, default_pool,
MAIL_MMAP_BLOCK_SIZE, 0, 0, TRUE);
} else {
@@ -66,7 +68,8 @@
static time_t maildir_mail_get_received_date(struct mail *_mail)
{
- struct index_mail *mail = (struct index_mail *) _mail;
+ struct index_mail *mail = (struct index_mail *)_mail;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
struct index_mail_data *data = &mail->data;
struct stat st;
int fd;
@@ -85,12 +88,12 @@
i_assert(fd != -1);
if (fstat(fd, &st) < 0) {
- mail_storage_set_critical(mail->ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"fstat(maildir) failed: %m");
return (time_t)-1;
}
} else {
- if (maildir_file_do(mail->ibox, mail->mail.mail.uid,
+ if (maildir_file_do(mbox, mail->mail.mail.uid,
do_stat, &st) <= 0)
return (time_t)-1;
}
@@ -105,6 +108,7 @@
static uoff_t maildir_mail_get_virtual_size(struct mail *_mail)
{
struct index_mail *mail = (struct index_mail *)_mail;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
struct index_mail_data *data = &mail->data;
const char *fname, *p;
uoff_t virtual_size;
@@ -119,7 +123,7 @@
return data->virtual_size;
}
- fname = maildir_uidlist_lookup(mail->ibox->uidlist,
+ fname = maildir_uidlist_lookup(mbox->uidlist,
mail->mail.mail.uid, &flags);
if (fname == NULL)
return (uoff_t)-1;
@@ -149,11 +153,12 @@
maildir_mail_get_special(struct mail *_mail, enum mail_fetch_field field)
{
struct index_mail *mail = (struct index_mail *)_mail;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
enum maildir_uidlist_rec_flag flags;
const char *fname, *end;
if (field == MAIL_FETCH_UIDL_FILE_NAME) {
- fname = maildir_uidlist_lookup(mail->ibox->uidlist,
+ fname = maildir_uidlist_lookup(mbox->uidlist,
mail->mail.mail.uid, &flags);
end = strchr(fname, ':');
return end == NULL ? fname : t_strdup_until(fname, end);
@@ -165,6 +170,7 @@
static uoff_t maildir_mail_get_physical_size(struct mail *_mail)
{
struct index_mail *mail = (struct index_mail *)_mail;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
struct index_mail_data *data = &mail->data;
struct stat st;
const char *fname, *p;
@@ -175,7 +181,7 @@
if (size != (uoff_t)-1)
return size;
- fname = maildir_uidlist_lookup(mail->ibox->uidlist,
+ fname = maildir_uidlist_lookup(mbox->uidlist,
mail->mail.mail.uid, &flags);
if (fname == NULL)
return (uoff_t)-1;
@@ -195,7 +201,7 @@
}
if (size == (uoff_t)-1) {
- if (maildir_file_do(mail->ibox, mail->mail.mail.uid,
+ if (maildir_file_do(mbox, mail->mail.mail.uid,
do_stat, &st) <= 0)
return (uoff_t)-1;
size = st.st_size;
@@ -212,12 +218,13 @@
struct message_size *hdr_size,
struct message_size *body_size)
{
- struct index_mail *mail = (struct index_mail *) _mail;
+ struct index_mail *mail = (struct index_mail *)_mail;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
struct index_mail_data *data = &mail->data;
int deleted;
if (data->stream == NULL) {
- data->stream = maildir_open_mail(mail->ibox,
+ data->stream = maildir_open_mail(mbox,
mail->mail.mail.uid, &deleted);
if (data->stream == NULL) {
_mail->expunged = deleted;
Index: maildir-save.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-save.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- maildir-save.c 3 Apr 2005 11:36:16 -0000 1.49
+++ maildir-save.c 8 Apr 2005 13:13:47 -0000 1.50
@@ -24,7 +24,7 @@
struct mail_save_context ctx;
pool_t pool;
- struct index_mailbox *ibox;
+ struct maildir_mailbox *mbox;
struct mail_index_transaction *trans;
struct maildir_uidlist_sync_ctx *sync_ctx;
@@ -62,16 +62,16 @@
else {
ret = -1;
if (ENOSPACE(errno)) {
- mail_storage_set_error(ctx->ibox->box.storage,
+ mail_storage_set_error(&ctx->mbox->storage->storage,
"Not enough disk space");
} else {
- mail_storage_set_critical(ctx->ibox->box.storage,
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
"link(%s, %s) failed: %m", tmp_path, new_path);
}
}
if (unlink(tmp_path) < 0 && errno != ENOENT) {
- mail_storage_set_critical(ctx->ibox->box.storage,
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
"unlink(%s) failed: %m", tmp_path);
}
t_pop();
@@ -81,7 +81,7 @@
static struct maildir_save_context *
maildir_save_transaction_init(struct maildir_transaction_context *t)
{
- struct index_mailbox *ibox = t->ictx.ibox;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
struct maildir_save_context *ctx;
pool_t pool;
@@ -89,12 +89,12 @@
ctx = p_new(pool, struct maildir_save_context, 1);
ctx->ctx.transaction = &t->ictx.mailbox_ctx;
ctx->pool = pool;
- ctx->ibox = ibox;
+ ctx->mbox = mbox;
ctx->trans = t->ictx.trans;
- ctx->tmpdir = p_strconcat(pool, ibox->path, "/tmp", NULL);
- ctx->newdir = p_strconcat(pool, ibox->path, "/new", NULL);
- ctx->curdir = p_strconcat(pool, ibox->path, "/cur", NULL);
+ ctx->tmpdir = p_strconcat(pool, mbox->path, "/tmp", NULL);
+ ctx->newdir = p_strconcat(pool, mbox->path, "/new", NULL);
+ ctx->curdir = p_strconcat(pool, mbox->path, "/cur", NULL);
return ctx;
}
@@ -108,7 +108,7 @@
struct maildir_transaction_context *t =
(struct maildir_transaction_context *)_t;
struct maildir_save_context *ctx;
- struct index_mailbox *ibox = t->ictx.ibox;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
struct maildir_filename *mf;
struct ostream *output;
const char *fname, *dest_fname, *path;
@@ -122,7 +122,7 @@
ctx = t->save_ctx;
/* create a new file in tmp/ directory */
- ctx->fd = maildir_create_tmp(ibox, ctx->tmpdir, ibox->mail_create_mode,
+ ctx->fd = maildir_create_tmp(mbox, ctx->tmpdir, mbox->mail_create_mode,
&path);
if (ctx->fd == -1) {
ctx->failed = TRUE;
@@ -138,14 +138,14 @@
ctx->input = input;
output = o_stream_create_file(ctx->fd, system_pool, 0, FALSE);
- ctx->output = (ctx->ibox->storage->storage.flags &
+ ctx->output = (ctx->mbox->storage->storage.flags &
MAIL_STORAGE_FLAG_SAVE_CRLF) != 0 ?
o_stream_create_crlf(default_pool, output) :
o_stream_create_lf(default_pool, output);
o_stream_unref(output);
flags &= ~MAIL_RECENT;
- if (ibox->keep_recent)
+ if (mbox->ibox.keep_recent)
flags |= MAIL_RECENT;
/* now, we want to be able to rollback the whole append session,
@@ -210,7 +210,7 @@
if (utime(path, &buf) < 0) {
ctx->failed = TRUE;
- mail_storage_set_critical(ctx->ibox->box.storage,
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
"utime(%s) failed: %m", path);
}
}
@@ -222,12 +222,12 @@
/* FIXME: when saving multiple messages, we could get better
performance if we left the fd open and fsync()ed it later */
if (fsync(ctx->fd) < 0) {
- mail_storage_set_critical(ctx->ibox->box.storage,
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
"fsync(%s) failed: %m", path);
ctx->failed = TRUE;
}
if (close(ctx->fd) < 0) {
- mail_storage_set_critical(ctx->ibox->box.storage,
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
"close(%s) failed: %m", path);
ctx->failed = TRUE;
}
@@ -236,17 +236,17 @@
if (ctx->failed) {
/* delete the tmp file */
if (unlink(path) < 0 && errno != ENOENT) {
- mail_storage_set_critical(ctx->ibox->box.storage,
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
"unlink(%s) failed: %m", path);
}
errno = output_errno;
if (ENOSPACE(errno)) {
- mail_storage_set_error(ctx->ibox->box.storage,
+ mail_storage_set_error(&ctx->mbox->storage->storage,
"Not enough disk space");
} else if (errno != 0) {
- mail_storage_set_critical(ctx->ibox->box.storage,
- "write(%s) failed: %m", ctx->ibox->path);
+ mail_storage_set_critical(&ctx->mbox->storage->storage,
+ "write(%s) failed: %m", ctx->mbox->path);
}
ctx->files = ctx->files->next;
@@ -308,13 +308,13 @@
i_assert(ctx->output == NULL);
- sync_ctx = maildir_sync_index_begin(ctx->ibox);
+ sync_ctx = maildir_sync_index_begin(ctx->mbox);
if (sync_ctx == NULL) {
maildir_save_commit_abort(ctx, ctx->files);
return -1;
}
- ret = maildir_uidlist_lock(ctx->ibox->uidlist);
+ ret = maildir_uidlist_lock(ctx->mbox->uidlist);
if (ret <= 0) {
/* error or timeout - our transaction is broken */
maildir_sync_index_abort(sync_ctx);
@@ -327,14 +327,14 @@
return -1;
}
- first_uid = maildir_uidlist_get_next_uid(ctx->ibox->uidlist);
+ first_uid = maildir_uidlist_get_next_uid(ctx->mbox->uidlist);
mail_index_append_assign_uids(ctx->trans, first_uid, &last_uid);
flags = MAILDIR_UIDLIST_REC_FLAG_NEW_DIR |
MAILDIR_UIDLIST_REC_FLAG_RECENT;
/* move them into new/ */
- ctx->sync_ctx = maildir_uidlist_sync_init(ctx->ibox->uidlist, TRUE);
+ ctx->sync_ctx = maildir_uidlist_sync_init(ctx->mbox->uidlist, TRUE);
for (mf = ctx->files; mf != NULL; mf = mf->next) {
fname = mf->dest != NULL ? mf->dest : mf->basename;
if (maildir_file_move(ctx, mf->basename, mf->dest) < 0 ||
Index: maildir-storage.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -d -r1.95 -r1.96
--- maildir-storage.c 3 Apr 2005 11:36:16 -0000 1.95
+++ maildir-storage.c 8 Apr 2005 13:13:47 -0000 1.96
@@ -391,14 +391,16 @@
static int maildir_is_recent(struct index_mailbox *ibox, uint32_t uid)
{
- return maildir_uidlist_is_recent(ibox->uidlist, uid);
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)ibox;
+
+ return maildir_uidlist_is_recent(mbox->uidlist, uid);
}
static struct mailbox *
maildir_open(struct index_storage *storage, const char *name,
enum mailbox_open_flags flags)
{
- struct index_mailbox *ibox;
+ struct maildir_mailbox *mbox;
struct mail_index *index;
const char *path, *index_dir, *control_dir;
struct stat st;
@@ -418,32 +420,33 @@
mail_index_set_permissions(index, st.st_mode & 0666, st.st_gid);
pool = pool_alloconly_create("mailbox", 256);
- ibox = p_new(pool, struct index_mailbox, 1);
- ibox->box = maildir_mailbox;
- ibox->box.pool = pool;
- ibox->storage = storage;
+ mbox = p_new(pool, struct maildir_mailbox, 1);
+ mbox->ibox.box = maildir_mailbox;
+ mbox->ibox.box.pool = pool;
+ mbox->ibox.storage = storage;
+ mbox->ibox.mail_vfuncs = &maildir_mail_vfuncs;
+ mbox->ibox.is_recent = maildir_is_recent;
- if (index_storage_mailbox_init(ibox, index, name, flags) < 0) {
+ if (index_storage_mailbox_init(&mbox->ibox, index, name, flags) < 0) {
/* the memory was already freed */
return NULL;
}
- ibox->path = p_strdup(pool, path);
- ibox->control_dir = p_strdup(pool, control_dir);
+ mbox->storage = storage;
+ mbox->path = p_strdup(pool, path);
+ mbox->control_dir = p_strdup(pool, control_dir);
- ibox->mail_vfuncs = &maildir_mail_vfuncs;
- ibox->uidlist = maildir_uidlist_init(ibox);
- ibox->is_recent = maildir_is_recent;
+ mbox->uidlist = maildir_uidlist_init(mbox);
if (!shared)
- ibox->mail_create_mode = 0600;
+ mbox->mail_create_mode = 0600;
else {
- ibox->mail_create_mode = st.st_mode & 0666;
- ibox->private_flags_mask = MAIL_SEEN;
+ mbox->mail_create_mode = st.st_mode & 0666;
+ mbox->private_flags_mask = MAIL_SEEN;
}
- return &ibox->box;
+ return &mbox->ibox.box;
}
static struct mailbox *
@@ -811,7 +814,7 @@
static int maildir_storage_close(struct mailbox *box)
{
- struct index_mailbox *ibox = (struct index_mailbox *)box;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
int ret = 0;
/*FIXME:if (!maildir_try_flush_dirty_flags(ibox->index, TRUE)) {
@@ -819,7 +822,7 @@
ret = -1;
}*/
- maildir_uidlist_deinit(ibox->uidlist);
+ maildir_uidlist_deinit(mbox->uidlist);
index_storage_mailbox_free(box);
return ret;
}
@@ -828,21 +831,21 @@
maildir_notify_changes(struct mailbox *box, unsigned int min_interval,
mailbox_notify_callback_t *callback, void *context)
{
- struct index_mailbox *ibox = (struct index_mailbox *)box;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
- ibox->min_notify_interval = min_interval;
- ibox->notify_callback = callback;
- ibox->notify_context = context;
+ mbox->ibox.min_notify_interval = min_interval;
+ mbox->ibox.notify_callback = callback;
+ mbox->ibox.notify_context = context;
if (callback == NULL) {
- index_mailbox_check_remove_all(ibox);
+ index_mailbox_check_remove_all(&mbox->ibox);
return;
}
- index_mailbox_check_add(ibox,
- t_strconcat(ibox->storage->dir, "/new", NULL), TRUE);
- index_mailbox_check_add(ibox,
- t_strconcat(ibox->storage->dir, "/cur", NULL), TRUE);
+ index_mailbox_check_add(&mbox->ibox,
+ t_strconcat(mbox->storage->dir, "/new", NULL), TRUE);
+ index_mailbox_check_add(&mbox->ibox,
+ t_strconcat(mbox->storage->dir, "/cur", NULL), TRUE);
}
struct mail_storage maildir_storage = {
Index: maildir-storage.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- maildir-storage.h 15 Mar 2005 19:01:52 -0000 1.35
+++ maildir-storage.h 8 Apr 2005 13:13:47 -0000 1.36
@@ -14,6 +14,23 @@
struct maildir_save_context;
struct maildir_copy_context;
+struct maildir_mailbox {
+ struct index_mailbox ibox;
+ struct index_storage *storage;
+
+ const char *path, *control_dir;
+
+ /* maildir sync: */
+ struct maildir_uidlist *uidlist;
+ time_t last_new_mtime, last_cur_mtime, last_new_sync_time;
+ time_t dirty_cur_time;
+
+ mode_t mail_create_mode;
+ unsigned int private_flags_mask;
+
+ unsigned int syncing_commit:1;
+};
+
struct maildir_transaction_context {
struct index_transaction_context ictx;
struct maildir_save_context *save_ctx;
@@ -23,13 +40,13 @@
extern struct mail_vfuncs maildir_mail_vfuncs;
/* Return -1 = error, 0 = file not found, 1 = ok */
-typedef int maildir_file_do_func(struct index_mailbox *ibox,
+typedef int maildir_file_do_func(struct maildir_mailbox *mbox,
const char *path, void *context);
-int maildir_file_do(struct index_mailbox *ibox, uint32_t seq,
+int maildir_file_do(struct maildir_mailbox *mbox, uint32_t seq,
maildir_file_do_func *func, void *context);
const char *maildir_generate_tmp_filename(const struct timeval *tv);
-int maildir_create_tmp(struct index_mailbox *ibox, const char *dir,
+int maildir_create_tmp(struct maildir_mailbox *mbox, const char *dir,
mode_t mode, const char **fname_r);
struct mailbox_list_context *
@@ -42,10 +59,10 @@
struct mailbox_sync_context *
maildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);
-int maildir_storage_sync_force(struct index_mailbox *ibox);
+int maildir_storage_sync_force(struct maildir_mailbox *mbox);
struct maildir_index_sync_context *
-maildir_sync_index_begin(struct index_mailbox *ibox);
+maildir_sync_index_begin(struct maildir_mailbox *mbox);
void maildir_sync_index_abort(struct maildir_index_sync_context *sync_ctx);
int maildir_sync_index_finish(struct maildir_index_sync_context *sync_ctx,
int partial);
@@ -78,7 +95,7 @@
const char *maildir_get_path(struct index_storage *storage, const char *name);
-int maildir_sync_last_commit(struct index_mailbox *ibox);
+int maildir_sync_last_commit(struct maildir_mailbox *mbox);
int maildir_filename_get_flags(const char *fname, pool_t pool,
enum mail_flags *flags_r,
Index: maildir-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-sync.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- maildir-sync.c 14 Mar 2005 20:48:26 -0000 1.50
+++ maildir-sync.c 8 Apr 2005 13:13:47 -0000 1.51
@@ -189,7 +189,7 @@
#define MAILDIR_FILENAME_FLAG_FOUND 128
struct maildir_sync_context {
- struct index_mailbox *ibox;
+ struct maildir_mailbox *mbox;
const char *new_dir, *cur_dir;
int partial;
@@ -198,7 +198,7 @@
};
struct maildir_index_sync_context {
- struct index_mailbox *ibox;
+ struct maildir_mailbox *mbox;
struct mail_index_view *view;
struct mail_index_sync_ctx *sync_ctx;
struct mail_index_transaction *trans;
@@ -208,22 +208,22 @@
int dirty_state;
};
-static int maildir_expunge(struct index_mailbox *ibox, const char *path,
+static int maildir_expunge(struct maildir_mailbox *mbox, const char *path,
void *context __attr_unused__)
{
if (unlink(path) == 0) {
- ibox->dirty_cur_time = ioloop_time;
+ mbox->dirty_cur_time = ioloop_time;
return 1;
}
if (errno == ENOENT)
return 0;
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"unlink(%s) failed: %m", path);
return -1;
}
-static int maildir_sync_flags(struct index_mailbox *ibox, const char *path,
+static int maildir_sync_flags(struct maildir_mailbox *mbox, const char *path,
void *context)
{
struct maildir_index_sync_context *ctx = context;
@@ -244,7 +244,7 @@
if (rename(path, newpath) == 0) {
if ((flags8 & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0)
ctx->dirty_state = -1;
- ibox->dirty_cur_time = ioloop_time;
+ mbox->dirty_cur_time = ioloop_time;
return 1;
}
if (errno == ENOENT)
@@ -257,12 +257,12 @@
return 1;
}
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"rename(%s, %s) failed: %m", path, newpath);
return -1;
}
-static int maildir_sync_record(struct index_mailbox *ibox,
+static int maildir_sync_record(struct maildir_mailbox *mbox,
struct maildir_index_sync_context *ctx)
{
struct mail_index_sync_rec *sync_rec = &ctx->sync_rec;
@@ -286,7 +286,7 @@
for (seq = seq1; seq <= seq2; seq++) {
if (mail_index_lookup_uid(view, seq, &uid) < 0)
return -1;
- if (maildir_file_do(ibox, uid, maildir_expunge,
+ if (maildir_file_do(mbox, uid, maildir_expunge,
NULL) < 0)
return -1;
}
@@ -303,7 +303,7 @@
for (ctx->seq = seq1; ctx->seq <= seq2; ctx->seq++) {
if (mail_index_lookup_uid(view, ctx->seq, &uid) < 0)
return -1;
- if (maildir_file_do(ibox, uid,
+ if (maildir_file_do(mbox, uid,
maildir_sync_flags, ctx) < 0)
return -1;
if (ctx->dirty_state < 0) {
@@ -324,29 +324,30 @@
return 0;
}
-int maildir_sync_last_commit(struct index_mailbox *ibox)
+int maildir_sync_last_commit(struct maildir_mailbox *mbox)
{
struct maildir_index_sync_context ctx;
uint32_t seq;
uoff_t offset;
int ret;
- if (ibox->commit_log_file_seq == 0)
+ if (mbox->ibox.commit_log_file_seq == 0)
return 0;
memset(&ctx, 0, sizeof(ctx));
- ctx.ibox = ibox;
+ ctx.mbox = mbox;
- ibox->syncing_commit = TRUE;
- ret = mail_index_sync_begin(ibox->index, &ctx.sync_ctx, &ctx.view,
- ibox->commit_log_file_seq,
- ibox->commit_log_file_offset, FALSE, FALSE);
+ mbox->syncing_commit = TRUE;
+ ret = mail_index_sync_begin(mbox->ibox.index, &ctx.sync_ctx, &ctx.view,
+ mbox->ibox.commit_log_file_seq,
+ mbox->ibox.commit_log_file_offset,
+ FALSE, FALSE);
if (ret > 0) {
ctx.trans = mail_index_transaction_begin(ctx.view, FALSE, TRUE);
while ((ret = mail_index_sync_next(ctx.sync_ctx,
&ctx.sync_rec)) > 0) {
- if (maildir_sync_record(ibox, &ctx) < 0) {
+ if (maildir_sync_record(mbox, &ctx) < 0) {
ret = -1;
break;
}
@@ -356,26 +357,26 @@
if (mail_index_sync_commit(ctx.sync_ctx) < 0)
ret = -1;
}
- ibox->syncing_commit = FALSE;
+ mbox->syncing_commit = FALSE;
if (ret == 0) {
- ibox->commit_log_file_seq = 0;
- ibox->commit_log_file_offset = 0;
+ mbox->ibox.commit_log_file_seq = 0;
+ mbox->ibox.commit_log_file_offset = 0;
} else {
- mail_storage_set_index_error(ibox);
+ mail_storage_set_index_error(&mbox->ibox);
}
return ret;
}
static struct maildir_sync_context *
-maildir_sync_context_new(struct index_mailbox *ibox)
+maildir_sync_context_new(struct maildir_mailbox *mbox)
{
struct maildir_sync_context *ctx;
ctx = t_new(struct maildir_sync_context, 1);
- ctx->ibox = ibox;
- ctx->new_dir = t_strconcat(ibox->path, "/new", NULL);
- ctx->cur_dir = t_strconcat(ibox->path, "/cur", NULL);
+ ctx->mbox = mbox;
+ ctx->new_dir = t_strconcat(mbox->path, "/new", NULL);
+ ctx->cur_dir = t_strconcat(mbox->path, "/cur", NULL);
return ctx;
}
@@ -387,7 +388,7 @@
maildir_sync_index_abort(ctx->index_sync_ctx);
}
-static int maildir_fix_duplicate(struct index_mailbox *ibox, const char *dir,
+static int maildir_fix_duplicate(struct maildir_mailbox *mbox, const char *dir,
const char *old_fname)
{
const char *new_fname, *old_path, *new_path;
@@ -397,13 +398,13 @@
old_path = t_strconcat(dir, "/", old_fname, NULL);
new_fname = maildir_generate_tmp_filename(&ioloop_timeval);
- new_path = t_strconcat(ibox->path, "/new/", new_fname, NULL);
+ new_path = t_strconcat(mbox->path, "/new/", new_fname, NULL);
if (rename(old_path, new_path) == 0) {
i_warning("Fixed duplicate in %s: %s -> %s",
- ibox->path, old_fname, new_fname);
+ mbox->path, old_fname, new_fname);
} else if (errno != ENOENT) {
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"rename(%s, %s) failed: %m", old_path, new_path);
ret = -1;
}
@@ -414,7 +415,7 @@
static int maildir_scan_dir(struct maildir_sync_context *ctx, int new_dir)
{
- struct mail_storage *storage = ctx->ibox->box.storage;
+ struct mail_storage *storage = &ctx->mbox->storage->storage;
const char *dir;
DIR *dirp;
string_t *src, *dest;
@@ -434,8 +435,8 @@
src = t_str_new(1024);
dest = t_str_new(1024);
- move_new = new_dir && !mailbox_is_readonly(&ctx->ibox->box) &&
- !ctx->ibox->keep_recent;
+ move_new = new_dir && !mailbox_is_readonly(&ctx->mbox->ibox.box) &&
+ !ctx->mbox->ibox.keep_recent;
while ((dp = readdir(dirp)) != NULL) {
if (dp->d_name[0] == '.')
continue;
@@ -446,9 +447,9 @@
/* new file and we couldn't lock uidlist, check this
later in next sync. */
if (new_dir)
- ctx->ibox->last_new_mtime = 0;
+ ctx->mbox->last_new_mtime = 0;
else
- ctx->ibox->dirty_cur_time = ioloop_time;
+ ctx->mbox->dirty_cur_time = ioloop_time;
continue;
}
if (ret < 0)
@@ -464,7 +465,7 @@
str_append(dest, ":2,");
if (rename(str_c(src), str_c(dest)) == 0) {
/* we moved it - it's \Recent for us */
- ctx->ibox->dirty_cur_time = ioloop_time;
+ ctx->mbox->dirty_cur_time = ioloop_time;
flags |= MAILDIR_UIDLIST_REC_FLAG_MOVED |
MAILDIR_UIDLIST_REC_FLAG_RECENT;
} else if (ENOTFOUND(errno)) {
@@ -494,7 +495,7 @@
break;
/* possibly duplicate - try fixing it */
- if (maildir_fix_duplicate(ctx->ibox,
+ if (maildir_fix_duplicate(ctx->mbox,
dir, dp->d_name) < 0) {
ret = -1;
break;
@@ -514,21 +515,21 @@
static int maildir_sync_quick_check(struct maildir_sync_context *ctx,
int *new_changed_r, int *cur_changed_r)
{
- struct index_mailbox *ibox = ctx->ibox;
+ struct maildir_mailbox *mbox = ctx->mbox;
struct stat st;
time_t new_mtime, cur_mtime;
*new_changed_r = *cur_changed_r = FALSE;
if (stat(ctx->new_dir, &st) < 0) {
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"stat(%s) failed: %m", ctx->new_dir);
return -1;
}
new_mtime = st.st_mtime;
if (stat(ctx->cur_dir, &st) < 0) {
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"stat(%s) failed: %m", ctx->cur_dir);
return -1;
}
@@ -536,33 +537,34 @@
/* cur stamp is kept in index, we don't have to sync if
someone else has done it and updated the index. */
- ibox->last_cur_mtime = mail_index_get_header(ibox->view)->sync_stamp;
- if (ibox->dirty_cur_time == 0 && cur_mtime != ibox->last_cur_mtime) {
+ mbox->last_cur_mtime =
+ mail_index_get_header(mbox->ibox.view)->sync_stamp;
+ if (mbox->dirty_cur_time == 0 && cur_mtime != mbox->last_cur_mtime) {
/* check if the index has been updated.. */
- if (mail_index_refresh(ibox->index) < 0) {
- mail_storage_set_index_error(ibox);
+ if (mail_index_refresh(mbox->ibox.index) < 0) {
+ mail_storage_set_index_error(&mbox->ibox);
return -1;
}
- ibox->last_cur_mtime =
- mail_index_get_header(ibox->view)->sync_stamp;
+ mbox->last_cur_mtime =
+ mail_index_get_header(mbox->ibox.view)->sync_stamp;
}
- if (new_mtime != ibox->last_new_mtime ||
- new_mtime >= ibox->last_new_sync_time - MAILDIR_SYNC_SECS) {
+ if (new_mtime != mbox->last_new_mtime ||
+ new_mtime >= mbox->last_new_sync_time - MAILDIR_SYNC_SECS) {
*new_changed_r = TRUE;
- ibox->last_new_mtime = new_mtime;
- ibox->last_new_sync_time = ioloop_time;
+ mbox->last_new_mtime = new_mtime;
+ mbox->last_new_sync_time = ioloop_time;
}
- if (cur_mtime != ibox->last_cur_mtime ||
- (ibox->dirty_cur_time != 0 &&
- ioloop_time - ibox->dirty_cur_time > MAILDIR_SYNC_SECS)) {
+ if (cur_mtime != mbox->last_cur_mtime ||
+ (mbox->dirty_cur_time != 0 &&
+ ioloop_time - mbox->dirty_cur_time > MAILDIR_SYNC_SECS)) {
/* cur/ changed, or delayed cur/ check */
*cur_changed_r = TRUE;
- ibox->last_cur_mtime = cur_mtime;
+ mbox->last_cur_mtime = cur_mtime;
- ibox->dirty_cur_time =
+ mbox->dirty_cur_time =
cur_mtime >= ioloop_time - MAILDIR_SYNC_SECS ?
cur_mtime : 0;
}
@@ -571,17 +573,17 @@
}
struct maildir_index_sync_context *
-maildir_sync_index_begin(struct index_mailbox *ibox)
+maildir_sync_index_begin(struct maildir_mailbox *mbox)
{
struct maildir_index_sync_context *sync_ctx;
sync_ctx = i_new(struct maildir_index_sync_context, 1);
- sync_ctx->ibox = ibox;
+ sync_ctx->mbox = mbox;
- if (mail_index_sync_begin(ibox->index, &sync_ctx->sync_ctx,
+ if (mail_index_sync_begin(mbox->ibox.index, &sync_ctx->sync_ctx,
&sync_ctx->view, (uint32_t)-1, (uoff_t)-1,
FALSE, FALSE) <= 0) {
- mail_storage_set_index_error(ibox);
+ mail_storage_set_index_error(&mbox->ibox);
return NULL;
}
return sync_ctx;
@@ -596,7 +598,7 @@
int maildir_sync_index_finish(struct maildir_index_sync_context *sync_ctx,
int partial)
{
- struct index_mailbox *ibox = sync_ctx->ibox;
+ struct maildir_mailbox *mbox = sync_ctx->mbox;
struct mail_index_view *view = sync_ctx->view;
struct maildir_uidlist_iter_ctx *iter;
struct mail_index_transaction *trans;
@@ -612,15 +614,15 @@
int ret;
hdr = mail_index_get_header(view);
- uid_validity = maildir_uidlist_get_uid_validity(ibox->uidlist);
+ uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
if (uid_validity != hdr->uid_validity &&
uid_validity != 0 && hdr->uid_validity != 0) {
/* uidvalidity changed and mailbox isn't being initialized,
index must be rebuilt */
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"Maildir %s sync: UIDVALIDITY changed (%u -> %u)",
- ibox->path, hdr->uid_validity, uid_validity);
- mail_index_mark_corrupted(ibox->index);
+ mbox->path, hdr->uid_validity, uid_validity);
+ mail_index_mark_corrupted(mbox->ibox.index);
maildir_sync_index_abort(sync_ctx);
return -1;
}
@@ -631,7 +633,7 @@
keyword_pool = pool_alloconly_create("maildir keywords", 128);
seq = 0;
- iter = maildir_uidlist_iter_init(ibox->uidlist);
+ iter = maildir_uidlist_iter_init(mbox->uidlist);
while (maildir_uidlist_iter_next(iter, &uid, &uflags, &filename)) {
p_clear(keyword_pool);
maildir_filename_get_flags(filename, keyword_pool,
@@ -666,18 +668,19 @@
if ((uflags &
MAILDIR_UIDLIST_REC_FLAG_RACING) != 0) {
mail_storage_set_critical(
- ibox->box.storage,
+ &mbox->storage->storage,
"Maildir %s sync: "
"UID < next_uid "
"(%u < %u, file = %s)",
- ibox->path, uid, hdr->next_uid,
+ mbox->path, uid, hdr->next_uid,
filename);
- mail_index_mark_corrupted(ibox->index);
+ mail_index_mark_corrupted(
+ mbox->ibox.index);
ret = -1;
break;
}
- ibox->dirty_cur_time = ioloop_time;
- maildir_uidlist_add_flags(ibox->uidlist,
+ mbox->dirty_cur_time = ioloop_time;
+ maildir_uidlist_add_flags(mbox->uidlist,
filename,
MAILDIR_UIDLIST_REC_FLAG_RACING);
@@ -716,18 +719,19 @@
continue;
}
if ((uflags & MAILDIR_UIDLIST_REC_FLAG_RACING) != 0) {
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(
+ &mbox->storage->storage,
"Maildir %s sync: "
"UID inserted in the middle of mailbox "
"(%u > %u, file = %s)",
- ibox->path, rec->uid, uid, filename);
- mail_index_mark_corrupted(ibox->index);
+ mbox->path, rec->uid, uid, filename);
+ mail_index_mark_corrupted(mbox->ibox.index);
ret = -1;
break;
}
- ibox->dirty_cur_time = ioloop_time;
- maildir_uidlist_add_flags(ibox->uidlist, filename,
+ mbox->dirty_cur_time = ioloop_time;
+ maildir_uidlist_add_flags(mbox->uidlist, filename,
MAILDIR_UIDLIST_REC_FLAG_RACING);
seq--;
@@ -735,8 +739,8 @@
}
if ((rec->flags & MAIL_RECENT) != 0) {
- index_mailbox_set_recent(ibox, seq);
- if (ibox->keep_recent) {
+ index_mailbox_set_recent(&mbox->ibox, seq);
+ if (mbox->ibox.keep_recent) {
flags |= MAIL_RECENT;
} else {
mail_index_update_flags(trans, seq,
@@ -781,19 +785,19 @@
}
/* now, sync the index */
- ibox->syncing_commit = TRUE;
+ mbox->syncing_commit = TRUE;
while ((ret = mail_index_sync_next(sync_ctx->sync_ctx,
&sync_ctx->sync_rec)) > 0) {
- if (maildir_sync_record(ibox, sync_ctx) < 0) {
+ if (maildir_sync_record(mbox, sync_ctx) < 0) {
ret = -1;
break;
}
}
- ibox->syncing_commit = FALSE;
+ mbox->syncing_commit = FALSE;
- if (ibox->dirty_cur_time == 0 &&
- ibox->last_cur_mtime != (time_t)hdr->sync_stamp) {
- uint32_t sync_stamp = ibox->last_cur_mtime;
+ if (mbox->dirty_cur_time == 0 &&
+ mbox->last_cur_mtime != (time_t)hdr->sync_stamp) {
+ uint32_t sync_stamp = mbox->last_cur_mtime;
mail_index_update_header(trans,
offsetof(struct mail_index_header, sync_stamp),
@@ -802,16 +806,16 @@
if (hdr->uid_validity == 0) {
/* get the initial uidvalidity */
- if (maildir_uidlist_update(ibox->uidlist) < 0)
+ if (maildir_uidlist_update(mbox->uidlist) < 0)
ret = -1;
- uid_validity = maildir_uidlist_get_uid_validity(ibox->uidlist);
+ uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
if (uid_validity == 0) {
uid_validity = ioloop_time;
- maildir_uidlist_set_uid_validity(ibox->uidlist,
+ maildir_uidlist_set_uid_validity(mbox->uidlist,
uid_validity);
}
} else if (uid_validity == 0) {
- maildir_uidlist_set_uid_validity(ibox->uidlist,
+ maildir_uidlist_set_uid_validity(mbox->uidlist,
hdr->uid_validity);
}
@@ -821,7 +825,7 @@
&uid_validity, sizeof(uid_validity));
}
- next_uid = maildir_uidlist_get_next_uid(ibox->uidlist);
+ next_uid = maildir_uidlist_get_next_uid(mbox->uidlist);
if (next_uid != 0 && hdr->next_uid != next_uid) {
mail_index_update_header(trans,
offsetof(struct mail_index_header, next_uid),
@@ -838,18 +842,18 @@
if (mail_index_transaction_commit(trans, &seq, &offset) < 0)
ret = -1;
else if (seq != 0) {
- ibox->commit_log_file_seq = seq;
- ibox->commit_log_file_offset = offset;
+ mbox->ibox.commit_log_file_seq = seq;
+ mbox->ibox.commit_log_file_offset = offset;
}
if (mail_index_sync_commit(sync_ctx->sync_ctx) < 0)
ret = -1;
}
if (ret == 0) {
- ibox->commit_log_file_seq = 0;
- ibox->commit_log_file_offset = 0;
+ mbox->ibox.commit_log_file_seq = 0;
+ mbox->ibox.commit_log_file_offset = 0;
} else {
- mail_storage_set_index_error(ibox);
+ mail_storage_set_index_error(&mbox->ibox);
}
i_free(sync_ctx);
@@ -915,13 +919,13 @@
problem rarely happens except under high amount of modifications.
*/
- if (!ctx->ibox->syncing_commit) {
- ctx->index_sync_ctx = maildir_sync_index_begin(ctx->ibox);
+ if (!ctx->mbox->syncing_commit) {
+ ctx->index_sync_ctx = maildir_sync_index_begin(ctx->mbox);
if (ctx->index_sync_ctx == NULL)
return -1;
}
- if ((ret = maildir_uidlist_lock(ctx->ibox->uidlist)) <= 0) {
+ if ((ret = maildir_uidlist_lock(ctx->mbox->uidlist)) <= 0) {
/* failure / timeout. if forced is TRUE, we could still go
forward and check only for renamed files, but is it worth
the trouble? .. */
@@ -930,7 +934,7 @@
ctx->partial = !cur_changed;
ctx->uidlist_sync_ctx =
- maildir_uidlist_sync_init(ctx->ibox->uidlist, ctx->partial);
+ maildir_uidlist_sync_init(ctx->mbox->uidlist, ctx->partial);
if (maildir_scan_dir(ctx, TRUE) < 0)
return -1;
@@ -941,7 +945,7 @@
/* finish uidlist syncing, but keep it still locked */
maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx);
- if (!ctx->ibox->syncing_commit) {
+ if (!ctx->mbox->syncing_commit) {
if (maildir_sync_index_finish(ctx->index_sync_ctx,
ctx->partial) < 0) {
ctx->index_sync_ctx = NULL;
@@ -956,12 +960,12 @@
return ret;
}
-int maildir_storage_sync_force(struct index_mailbox *ibox)
+int maildir_storage_sync_force(struct maildir_mailbox *mbox)
{
struct maildir_sync_context *ctx;
int ret;
- ctx = maildir_sync_context_new(ibox);
+ ctx = maildir_sync_context_new(mbox);
ret = maildir_sync_context(ctx, TRUE);
maildir_sync_deinit(ctx);
return ret;
@@ -970,15 +974,16 @@
struct mailbox_sync_context *
maildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
{
- struct index_mailbox *ibox = (struct index_mailbox *)box;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
struct maildir_sync_context *ctx;
int ret = 0;
if ((flags & MAILBOX_SYNC_FLAG_FAST) == 0 ||
- ibox->sync_last_check + MAILBOX_FULL_SYNC_INTERVAL <= ioloop_time) {
- ibox->sync_last_check = ioloop_time;
+ mbox->ibox.sync_last_check + MAILBOX_FULL_SYNC_INTERVAL <=
+ ioloop_time) {
+ mbox->ibox.sync_last_check = ioloop_time;
- ctx = maildir_sync_context_new(ibox);
+ ctx = maildir_sync_context_new(mbox);
ret = maildir_sync_context(ctx, FALSE);
maildir_sync_deinit(ctx);
}
Index: maildir-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-transaction.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- maildir-transaction.c 15 Mar 2005 19:01:52 -0000 1.7
+++ maildir-transaction.c 8 Apr 2005 13:13:47 -0000 1.8
@@ -7,11 +7,11 @@
maildir_transaction_begin(struct mailbox *box,
enum mailbox_transaction_flags flags)
{
- struct index_mailbox *ibox = (struct index_mailbox *)box;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
struct maildir_transaction_context *t;
t = i_new(struct maildir_transaction_context, 1);
- index_transaction_init(&t->ictx, ibox, flags);
+ index_transaction_init(&t->ictx, &mbox->ibox, flags);
return &t->ictx.mailbox_ctx;
}
@@ -20,7 +20,7 @@
{
struct maildir_transaction_context *t =
(struct maildir_transaction_context *)_t;
- struct index_mailbox *ibox = t->ictx.ibox;
+ struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
struct maildir_save_context *save_ctx;
int ret = 0;
@@ -48,7 +48,7 @@
maildir_transaction_save_commit_post(save_ctx);
}
- return ret < 0 ? -1 : maildir_sync_last_commit(ibox);
+ return ret < 0 ? -1 : maildir_sync_last_commit(mbox);
}
void maildir_transaction_rollback(struct mailbox_transaction_context *_t)
Index: maildir-uidlist.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- maildir-uidlist.c 31 Jan 2005 18:52:36 -0000 1.35
+++ maildir-uidlist.c 8 Apr 2005 13:13:47 -0000 1.36
@@ -29,7 +29,7 @@
};
struct maildir_uidlist {
- struct index_mailbox *ibox;
+ struct maildir_mailbox *mbox;
char *fname;
int lock_fd;
@@ -78,9 +78,9 @@
if (UIDLIST_IS_LOCKED(uidlist))
return 1;
- path = t_strconcat(uidlist->ibox->control_dir,
+ path = t_strconcat(uidlist->mbox->control_dir,
"/" MAILDIR_UIDLIST_NAME, NULL);
- old_mask = umask(0777 & ~uidlist->ibox->mail_create_mode);
+ old_mask = umask(0777 & ~uidlist->mbox->mail_create_mode);
fd = file_dotlock_open(&uidlist->dotlock_settings, path,
nonblock ? DOTLOCK_CREATE_FLAG_NONBLOCK : 0,
&uidlist->dotlock);
@@ -88,7 +88,7 @@
if (fd == -1) {
if (errno == EAGAIN)
return 0;
- mail_storage_set_critical(uidlist->ibox->box.storage,
+ mail_storage_set_critical(&uidlist->mbox->storage->storage,
"file_dotlock_open(%s) failed: %m", path);
return -1;
}
@@ -120,14 +120,14 @@
uidlist->lock_fd = -1;
}
-struct maildir_uidlist *maildir_uidlist_init(struct index_mailbox *ibox)
+struct maildir_uidlist *maildir_uidlist_init(struct maildir_mailbox *mbox)
{
struct maildir_uidlist *uidlist;
uidlist = i_new(struct maildir_uidlist, 1);
- uidlist->ibox = ibox;
+ uidlist->mbox = mbox;
uidlist->fname =
- i_strconcat(ibox->control_dir, "/" MAILDIR_UIDLIST_NAME, NULL);
+ i_strconcat(mbox->control_dir, "/" MAILDIR_UIDLIST_NAME, NULL);
uidlist->lock_fd = -1;
uidlist->record_buf = buffer_create_dynamic(default_pool, 512);
uidlist->files = hash_create(default_pool, default_pool, 4096,
@@ -139,7 +139,7 @@
uidlist->dotlock_settings.immediate_stale_timeout =
UIDLIST_LOCK_STALE_TIMEOUT;
uidlist->dotlock_settings.temp_prefix =
- uidlist->ibox->storage->temp_prefix;
+ uidlist->mbox->storage->temp_prefix;
return uidlist;
}
@@ -179,12 +179,12 @@
if (uid == 0 || *line != ' ') {
/* invalid file */
- mail_storage_set_critical(uidlist->ibox->box.storage,
+ mail_storage_set_critical(&uidlist->mbox->storage->storage,
"Invalid data in file %s", uidlist->fname);
return 0;
}
if (uid <= uidlist->prev_read_uid) {
- mail_storage_set_critical(uidlist->ibox->box.storage,
+ mail_storage_set_critical(&uidlist->mbox->storage->storage,
"UIDs not ordered in file %s (%u > %u)",
uidlist->fname, uid, uidlist->prev_read_uid);
return 0;
@@ -198,7 +198,7 @@
uidlist->last_seen_uid = uid;
if (uid >= uidlist->next_uid) {
- mail_storage_set_critical(uidlist->ibox->box.storage,
+ mail_storage_set_critical(&uidlist->mbox->storage->storage,
"UID larger than next_uid in file %s (%u >= %u)",
uidlist->fname, uid, uidlist->next_uid);
return 0;
@@ -213,7 +213,7 @@
}
if (hash_lookup_full(uidlist->files, line, NULL, NULL)) {
- mail_storage_set_critical(uidlist->ibox->box.storage,
+ mail_storage_set_critical(&uidlist->mbox->storage->storage,
"Duplicate file in uidlist file %s: %s",
uidlist->fname, line);
return 0;
@@ -230,7 +230,7 @@
int maildir_uidlist_update(struct maildir_uidlist *uidlist)
{
- struct mail_storage *storage = uidlist->ibox->box.storage;
+ struct mail_storage *storage = &uidlist->mbox->storage->storage;
const char *line;
unsigned int uid_validity, next_uid;
struct istream *input;
@@ -403,7 +403,7 @@
/* we haven't synced yet, trust index */
const struct mail_index_header *hdr;
- hdr = mail_index_get_header(uidlist->ibox->view);
+ hdr = mail_index_get_header(uidlist->mbox->ibox.view);
return hdr->recent_messages_count;
}
@@ -443,7 +443,7 @@
static int maildir_uidlist_rewrite_fd(struct maildir_uidlist *uidlist,
const char *temp_path)
{
- struct mail_storage *storage = uidlist->ibox->box.storage;
+ struct mail_storage *storage = &uidlist->mbox->storage->storage;
struct maildir_uidlist_iter_ctx *iter;
struct utimbuf ut;
string_t *str;
@@ -461,7 +461,7 @@
str_printfa(str, "%u %u %u\n", uidlist->version,
uidlist->uid_validity, uidlist->next_uid);
- iter = maildir_uidlist_iter_init(uidlist->ibox->uidlist);
+ iter = maildir_uidlist_iter_init(uidlist->mbox->uidlist);
while (maildir_uidlist_iter_next(iter, &uid, &flags, &filename)) {
/* avoid overflowing str buffer so we don't eat more memory
than we need. */
@@ -513,22 +513,22 @@
static int maildir_uidlist_rewrite(struct maildir_uidlist *uidlist)
{
- struct index_mailbox *ibox = uidlist->ibox;
+ struct maildir_mailbox *mbox = uidlist->mbox;
const char *temp_path, *db_path;
int ret;
i_assert(UIDLIST_IS_LOCKED(uidlist));
- temp_path = t_strconcat(ibox->control_dir,
+ temp_path = t_strconcat(mbox->control_dir,
"/" MAILDIR_UIDLIST_NAME ".lock", NULL);
ret = maildir_uidlist_rewrite_fd(uidlist, temp_path);
if (ret == 0) {
- db_path = t_strconcat(ibox->control_dir,
+ db_path = t_strconcat(mbox->control_dir,
"/" MAILDIR_UIDLIST_NAME, NULL);
if (file_dotlock_replace(&uidlist->dotlock, 0) <= 0) {
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"file_dotlock_replace(%s) failed: %m", db_path);
(void)unlink(temp_path);
ret = -1;
Index: maildir-uidlist.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- maildir-uidlist.h 11 Jul 2004 21:04:46 -0000 1.12
+++ maildir-uidlist.h 8 Apr 2005 13:13:47 -0000 1.13
@@ -15,7 +15,7 @@
int maildir_uidlist_try_lock(struct maildir_uidlist *uidlist);
void maildir_uidlist_unlock(struct maildir_uidlist *uidlist);
-struct maildir_uidlist *maildir_uidlist_init(struct index_mailbox *ibox);
+struct maildir_uidlist *maildir_uidlist_init(struct maildir_mailbox *mbox);
void maildir_uidlist_deinit(struct maildir_uidlist *uidlist);
/* Returns -1 if error, 0 if file is broken or lost, 1 if ok. */
Index: maildir-util.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-util.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- maildir-util.c 26 Dec 2004 09:12:43 -0000 1.9
+++ maildir-util.c 8 Apr 2005 13:13:47 -0000 1.10
@@ -11,53 +11,53 @@
#include <fcntl.h>
#include <sys/stat.h>
-static int maildir_file_do_try(struct index_mailbox *ibox, uint32_t uid,
+static int maildir_file_do_try(struct maildir_mailbox *mbox, uint32_t uid,
maildir_file_do_func *func, void *context)
{
const char *fname, *path;
enum maildir_uidlist_rec_flag flags;
int ret;
- fname = maildir_uidlist_lookup(ibox->uidlist, uid, &flags);
+ fname = maildir_uidlist_lookup(mbox->uidlist, uid, &flags);
if (fname == NULL)
return -2; /* expunged */
t_push();
if ((flags & MAILDIR_UIDLIST_REC_FLAG_NEW_DIR) != 0) {
/* probably in new/ dir */
- path = t_strconcat(ibox->path, "/new/", fname, NULL);
- ret = func(ibox, path, context);
+ path = t_strconcat(mbox->path, "/new/", fname, NULL);
+ ret = func(mbox, path, context);
if (ret != 0) {
t_pop();
return ret;
}
}
- path = t_strconcat(ibox->path, "/cur/", fname, NULL);
- ret = func(ibox, path, context);
+ path = t_strconcat(mbox->path, "/cur/", fname, NULL);
+ ret = func(mbox, path, context);
t_pop();
return ret;
}
-int maildir_file_do(struct index_mailbox *ibox, uint32_t uid,
+int maildir_file_do(struct maildir_mailbox *mbox, uint32_t uid,
maildir_file_do_func *func, void *context)
{
int i, ret;
- ret = maildir_file_do_try(ibox, uid, func, context);
+ ret = maildir_file_do_try(mbox, uid, func, context);
for (i = 0; i < 10 && ret == 0; i++) {
/* file is either renamed or deleted. sync the maildir and
see which one. if file appears to be renamed constantly,
don't try to open it more than 10 times. */
- if (maildir_storage_sync_force(ibox) < 0)
+ if (maildir_storage_sync_force(mbox) < 0)
return -1;
- ret = maildir_file_do_try(ibox, uid, func, context);
+ ret = maildir_file_do_try(mbox, uid, func, context);
}
if (i == 10) {
- mail_storage_set_critical(ibox->box.storage,
- "maildir_file_do(%s) racing", ibox->path);
+ mail_storage_set_critical(&mbox->storage->storage,
+ "maildir_file_do(%s) racing", mbox->path);
}
return ret == -2 ? 0 : ret;
@@ -209,7 +209,7 @@
}
}
-int maildir_create_tmp(struct index_mailbox *ibox, const char *dir,
+int maildir_create_tmp(struct maildir_mailbox *mbox, const char *dir,
mode_t mode, const char **fname_r)
{
const char *path, *tmp_fname;
@@ -244,10 +244,10 @@
*fname_r = t_strdup(path);
if (fd == -1) {
if (ENOSPACE(errno)) {
- mail_storage_set_error(ibox->box.storage,
+ mail_storage_set_error(&mbox->storage->storage,
"Not enough disk space");
} else {
- mail_storage_set_critical(ibox->box.storage,
+ mail_storage_set_critical(&mbox->storage->storage,
"open(%s) failed: %m", path);
}
}
- Previous message: [dovecot-cvs] dovecot/src/lib-storage/index index-storage.c, 1.73,
1.74 index-storage.h, 1.91, 1.92
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-file.c, 1.8,
1.9 mbox-file.h, 1.2, 1.3 mbox-lock.c, 1.14, 1.15 mbox-lock.h,
1.1, 1.2 mbox-mail.c, 1.25, 1.26 mbox-save.c, 1.79,
1.80 mbox-storage.c, 1.116, 1.117 mbox-storage.h, 1.36,
1.37 mbox-sync-parse.c, 1.38, 1.39 mbox-sync-private.h, 1.48,
1.49 mbox-sync-rewrite.c, 1.45, 1.46 mbox-sync-update.c, 1.32,
1.33 mbox-sync.c, 1.145, 1.146 mbox-transaction.c, 1.11, 1.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list