#define QUOTA_CONTEXT(obj) \
MODULE_CONTEXT(obj, quota_storage_module)
+#define QUOTA_CONTEXT_REQUIRE(obj) \
+ MODULE_CONTEXT_REQUIRE(obj, quota_storage_module)
#define QUOTA_MAIL_CONTEXT(obj) \
- MODULE_CONTEXT(obj, quota_mail_module)
+ MODULE_CONTEXT_REQUIRE(obj, quota_mail_module)
#define QUOTA_LIST_CONTEXT(obj) \
MODULE_CONTEXT(obj, quota_mailbox_list_module)
static void quota_mail_expunge(struct mail *_mail)
{
struct mail_private *mail = (struct mail_private *)_mail;
- struct quota_mailbox *qbox = QUOTA_CONTEXT(_mail->box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(_mail->box);
struct quota_user *quser = QUOTA_USER_CONTEXT(_mail->box->storage->user);
union mail_module_context *qmail = QUOTA_MAIL_CONTEXT(mail);
- struct quota_transaction_context *qt = QUOTA_CONTEXT(_mail->transaction);
+ struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(_mail->transaction);
uoff_t size;
int ret;
quota_get_status(struct mailbox *box, enum mailbox_status_items items,
struct mailbox_status *status_r)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
struct quota_transaction_context *qt;
int ret = 0;
enum mailbox_transaction_flags flags,
const char *reason)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
struct mailbox_transaction_context *t;
struct quota_transaction_context *qt;
quota_mailbox_transaction_commit(struct mailbox_transaction_context *ctx,
struct mail_transaction_commit_changes *changes_r)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
- struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->box);
+ struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(ctx);
i_assert(qt->tmp_mail == NULL);
static void
quota_mailbox_transaction_rollback(struct mailbox_transaction_context *ctx)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
- struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->box);
+ struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(ctx);
i_assert(qt->tmp_mail == NULL);
struct quota_user *quser = QUOTA_USER_CONTEXT(src_ns->user);
struct quota_root *const *rootp;
+ i_assert(quser != NULL);
array_foreach(&quser->quota->roots, rootp) {
bool have_src_quota, have_dest_quota;
static int quota_check(struct mail_save_context *ctx, struct mailbox *src_box)
{
struct mailbox_transaction_context *t = ctx->transaction;
- struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
+ struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(t);
enum quota_alloc_result ret;
i_assert(!ctx->moving || src_box != NULL);
quota_copy(struct mail_save_context *ctx, struct mail *mail)
{
struct mailbox_transaction_context *t = ctx->transaction;
- struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
- struct quota_mailbox *qbox = QUOTA_CONTEXT(t->box);
+ struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(t);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(t->box);
/* we always want to know the mail size */
mail_add_temp_wanted_fields(ctx->dest_mail, MAIL_FETCH_PHYSICAL_SIZE, NULL);
quota_save_begin(struct mail_save_context *ctx, struct istream *input)
{
struct mailbox_transaction_context *t = ctx->transaction;
- struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
- struct quota_mailbox *qbox = QUOTA_CONTEXT(t->box);
+ struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(t);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(t->box);
const char *error;
uoff_t size;
static int quota_save_finish(struct mail_save_context *ctx)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->transaction->box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->transaction->box);
struct mailbox *src_box;
if (qbox->module_ctx.super.save_finish(ctx) < 0)
static void quota_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
enum mailbox_sync_type sync_type)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
struct quota_user *quser = QUOTA_USER_CONTEXT(box->storage->user);
const uint32_t *uids;
unsigned int i, count;
uoff_t size;
+ i_assert(quser != NULL);
if (qbox->module_ctx.super.sync_notify != NULL)
qbox->module_ctx.super.sync_notify(box, uid, sync_type);
static int quota_mailbox_sync_deinit(struct mailbox_sync_context *ctx,
struct mailbox_sync_status *status_r)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->box);
int ret;
ret = qbox->module_ctx.super.sync_deinit(ctx, status_r);
static void quota_mailbox_close(struct mailbox *box)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
struct quota_user *quser = QUOTA_USER_CONTEXT(box->storage->user);
+ i_assert(quser != NULL);
/* sync_notify() may be called outside sync_begin()..sync_deinit().
make sure we apply changes at close time at latest. */
quota_mailbox_sync_commit(qbox);
static void quota_mailbox_free(struct mailbox *box)
{
- struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+ struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
if (array_is_created(&qbox->expunge_uids)) {
array_free(&qbox->expunge_uids);
{
struct quota_mailbox_list *qlist = QUOTA_LIST_CONTEXT(list);
+ i_assert(qlist != NULL);
quota_remove_user_namespace(list->ns);
qlist->module_ctx.super.deinit(list);
}
static void quota_user_deinit(struct mail_user *user)
{
struct quota_user *quser = QUOTA_USER_CONTEXT(user);
+ i_assert(quser != NULL);
struct quota_settings *quota_set = quser->quota->set;
quota_deinit(&quser->quota);