Mercurial > dovecot > core-2.2
changeset 10766:300ac0c2cac3 HEAD
zlib: Added support for dbox and mdbox.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 19 Feb 2010 07:16:03 +0200 |
parents | 19df4309e389 |
children | ce1dd7328b20 |
files | src/plugins/zlib/zlib-plugin.c |
diffstat | 1 files changed, 21 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/zlib/zlib-plugin.c Fri Feb 19 07:15:46 2010 +0200 +++ b/src/plugins/zlib/zlib-plugin.c Fri Feb 19 07:16:03 2010 +0200 @@ -126,7 +126,7 @@ return NULL; } -static int zlib_maildir_get_stream(struct mail *_mail, +static int zlib_permail_get_stream(struct mail *_mail, struct message_size *hdr_size, struct message_size *body_size, struct istream **stream_r) @@ -163,7 +163,7 @@ } static struct mail * -zlib_maildir_mail_alloc(struct mailbox_transaction_context *t, +zlib_permail_mail_alloc(struct mailbox_transaction_context *t, enum mail_fetch_field wanted_fields, struct mailbox_header_lookup_ctx *wanted_headers) { @@ -178,7 +178,7 @@ zmail = p_new(mail->pool, union mail_module_context, 1); zmail->super = mail->v; - mail->v.get_stream = zlib_maildir_get_stream; + mail->v.get_stream = zlib_permail_get_stream; MODULE_CONTEXT_SET_SELF(mail, zlib_mail_module, zmail); return _mail; } @@ -286,11 +286,22 @@ return 0; } -static void zlib_maildir_alloc_init(struct mailbox *box) +static int zlib_mail_save_compress_finish(struct mail_save_context *ctx) +{ + struct mailbox *box = ctx->transaction->box; + union mailbox_module_context *zbox = ZLIB_CONTEXT(box); + + /* a bit kludgy: zlib ostreams' offset is actually the + uncompressed offset */ + ctx->saved_physical_size = ctx->output->offset; + return zbox->super.save_finish(ctx); +} + +static void zlib_permail_alloc_init(struct mailbox *box) { struct zlib_user *zuser = ZLIB_USER_CONTEXT(box->storage->user); - box->v.mail_alloc = zlib_maildir_mail_alloc; + box->v.mail_alloc = zlib_permail_mail_alloc; box->v.transaction_begin = zlib_mailbox_transaction_begin; box->v.transaction_rollback = zlib_mailbox_transaction_rollback; box->v.transaction_commit = zlib_mailbox_transaction_commit; @@ -299,6 +310,7 @@ box->v.save_finish = zlib_mail_save_finish; } else { box->v.save_begin = zlib_mail_save_compress_begin; + box->v.save_finish = zlib_mail_save_compress_finish; } } @@ -353,8 +365,10 @@ MODULE_CONTEXT_SET_SELF(box, zlib_storage_module, zbox); - if (strcmp(box->storage->name, "maildir") == 0) - zlib_maildir_alloc_init(box); + if (strcmp(box->storage->name, "maildir") == 0 || + strcmp(box->storage->name, "mdbox") == 0 || + strcmp(box->storage->name, "dbox") == 0) + zlib_permail_alloc_init(box); } static void zlib_mail_user_created(struct mail_user *user)