]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add mailbox_list_get_count()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 7 Jun 2024 10:12:35 +0000 (13:12 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 8 Jul 2024 10:31:58 +0000 (10:31 +0000)
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index 002dfc7ac22dc241843e236e08f78f125c63d123..21d0edafaa231490f2ca126d8010710a3ecfb209 100644 (file)
@@ -1666,6 +1666,23 @@ int mailbox_list_mailbox(struct mailbox_list *list, const char *name,
                                         flags_r);
 }
 
+int mailbox_list_get_count(struct mailbox_list *list, unsigned int *count_r)
+{
+       struct mailbox_list_iterate_context *iter =
+               mailbox_list_iter_init(list, "*",
+                                      MAILBOX_LIST_ITER_RAW_LIST |
+                                      MAILBOX_LIST_ITER_NO_AUTO_BOXES |
+                                      MAILBOX_LIST_ITER_RETURN_NO_FLAGS);
+       unsigned int count = 0;
+       while (mailbox_list_iter_next(iter) != NULL)
+               count++;
+       if (mailbox_list_iter_deinit(&iter) < 0)
+               return -1;
+
+       *count_r = count;
+       return 0;
+}
+
 static bool mailbox_list_init_changelog(struct mailbox_list *list)
 {
        struct mailbox_permissions perm;
index bd22973b3eef29738c43543b6735a847d1e87cf1..81e4560e780f5d226a3bf09335270968216800ef 100644 (file)
@@ -298,6 +298,9 @@ struct mailbox_log *mailbox_list_get_changelog(struct mailbox_list *list);
    current time is used */
 void mailbox_list_set_changelog_timestamp(struct mailbox_list *list,
                                          time_t stamp);
+/* Get the number of mailboxes in the list, ignoring any ACLs. Auto-created
+   mailboxes that haven't been yet created are not counted. */
+int mailbox_list_get_count(struct mailbox_list *list, unsigned int *count_r);
 
 /* Returns a prefix that temporary files should use without conflicting
    with the namespace. */