]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
quota: Add quota_root_iter_init_user()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 19 Jun 2018 11:12:45 +0000 (14:12 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 19 Jun 2018 14:37:20 +0000 (14:37 +0000)
src/plugins/quota/quota.c
src/plugins/quota/quota.h

index 7fbdc1be93b4d3660b27542183f9fa297e46f725..eadd0a890735f5173ecb0864511680827d4ed7d3 100644 (file)
@@ -636,14 +636,24 @@ void quota_remove_user_namespace(struct mail_namespace *ns)
 }
 
 struct quota_root_iter *
-quota_root_iter_init(struct mailbox *box)
+quota_root_iter_init_user(struct mail_user *user)
 {
        struct quota_root_iter *iter;
 
        iter = i_new(struct quota_root_iter, 1);
-       iter->quota = box->list->ns->owner != NULL ?
-               quota_get_mail_user_quota(box->list->ns->owner) :
-               quota_get_mail_user_quota(box->list->ns->user);
+       iter->quota = quota_get_mail_user_quota(user);
+       return iter;
+}
+
+struct quota_root_iter *
+quota_root_iter_init(struct mailbox *box)
+{
+       struct quota_root_iter *iter;
+       struct mail_user *user;
+
+       user = box->list->ns->owner != NULL ?
+               box->list->ns->owner : box->list->ns->user;
+       iter = quota_root_iter_init_user(user);
        iter->box = box;
        return iter;
 }
@@ -702,7 +712,8 @@ struct quota_root *quota_root_iter_next(struct quota_root_iter *iter)
                return NULL;
 
        for (; iter->i < count; iter->i++) {
-               if (!quota_root_is_visible(roots[iter->i], iter->box, FALSE))
+               if (iter->box != NULL &&
+                   !quota_root_is_visible(roots[iter->i], iter->box, FALSE))
                        continue;
 
                root = roots[iter->i];
index 5b15f846842ec42c45cc619b663b0ebfe14ec3ed..29a48f403adce50f3ac2df27dec70d6f3c07bbb1 100644 (file)
@@ -89,6 +89,7 @@ int quota_init(struct quota_settings *quota_set, struct mail_user *user,
 void quota_deinit(struct quota **quota);
 
 /* List all visible quota roots. They don't need to be freed. */
+struct quota_root_iter *quota_root_iter_init_user(struct mail_user *user);
 struct quota_root_iter *quota_root_iter_init(struct mailbox *box);
 struct quota_root *quota_root_iter_next(struct quota_root_iter *iter);
 void quota_root_iter_deinit(struct quota_root_iter **iter);