quota-storage.c revision bda9a6d9b021c122a01a85cb3cee2f996263d8f0
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (C) 2005 Timo Sirainen */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen *((void **)array_idx_modifiable(&(obj)->module_contexts, \
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenstatic unsigned int quota_storage_module_id = 0;
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenstatic bool quota_storage_module_id_set = FALSE;
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenstatic int quota_mail_expunge(struct mail *_mail)
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct mail_private *mail = (struct mail_private *)_mail;
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct quota_mail *qmail = QUOTA_CONTEXT(mail);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenquota_mailbox_transaction_begin(struct mailbox *box,
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomi array_idx_set(&t->module_contexts, quota_storage_module_id, &qt);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenquota_mailbox_transaction_commit(struct mailbox_transaction_context *ctx,
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen if (qbox->super.transaction_commit(ctx, flags) < 0) {
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenquota_mailbox_transaction_rollback(struct mailbox_transaction_context *ctx)
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx);
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainenstatic struct mail *
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomiquota_mail_alloc(struct mailbox_transaction_context *t,
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct mailbox_header_lookup_ctx *wanted_headers)
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen struct quota_mailbox *qbox = QUOTA_CONTEXT(t->box);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen _mail = qbox->super.mail_alloc(t, wanted_fields, wanted_headers);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen qmail = p_new(mail->pool, struct quota_mail, 1);
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen array_idx_set(&mail->module_contexts, quota_storage_module_id, &qmail);
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainenstatic int quota_check(struct mailbox_transaction_context *t, struct mail *mail)
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen else if (ret == 0) {
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen mail_storage_set_error(t->box->storage, "Quota exceeded");
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen "Internal quota calculation error");
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenquota_copy(struct mailbox_transaction_context *t, struct mail *mail,
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen enum mail_flags flags, struct mail_keywords *keywords,
NULL);
int ret;
bool too_large;
if (ret == 0) {
} else if (ret < 0) {
NULL);
static struct mailbox *
return NULL;
return box;
struct mailbox_transaction_context *t;
int ret;
if (ret < 0)
if (!quota_storage_module_id_set) {