]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Autoexpunge each mailbox in its own data stack frame
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 27 Dec 2022 16:24:34 +0000 (18:24 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 11 Jan 2023 21:50:37 +0000 (23:50 +0200)
src/lib-storage/mail-autoexpunge.c

index 9ab2809fdc4effc7879fd5bc2561ee9e2953878c..efdd11b637ead951f066316b97ecdda4e9f8194b 100644 (file)
@@ -212,12 +212,32 @@ mailbox_autoexpunge_wildcards(struct mail_namespace *ns,
        }
 }
 
+static void
+mailbox_autoexpunge_name(struct mail_namespace *ns,
+                        struct mailbox_settings *box_set,
+                        unsigned int *expunged_count)
+{
+       const char *vname;
+
+       if (strpbrk(box_set->name, "*?") != NULL)
+               mailbox_autoexpunge_wildcards(ns, box_set, expunged_count);
+       else {
+               if (box_set->name[0] == '\0' && ns->prefix_len > 0 &&
+                   ns->prefix[ns->prefix_len-1] == mail_namespace_get_sep(ns))
+                       vname = t_strndup(ns->prefix, ns->prefix_len - 1);
+               else
+                       vname = t_strconcat(ns->prefix, box_set->name, NULL);
+               mailbox_autoexpunge_set(ns, vname, box_set->autoexpunge,
+                                       box_set->autoexpunge_max_mails,
+                                       expunged_count);
+       }
+}
+
 static bool
 mail_namespace_autoexpunge(struct mail_namespace *ns, struct file_lock **lock,
                           unsigned int *expunged_count)
 {
        struct mailbox_settings *box_set;
-       const char *vname;
 
        if (!array_is_created(&ns->set->mailboxes))
                return TRUE;
@@ -230,18 +250,9 @@ mail_namespace_autoexpunge(struct mail_namespace *ns, struct file_lock **lock,
                if (!mailbox_autoexpunge_lock(ns->user, lock))
                        return FALSE;
 
-               if (strpbrk(box_set->name, "*?") != NULL)
-                       mailbox_autoexpunge_wildcards(ns, box_set, expunged_count);
-               else {
-                       if (box_set->name[0] == '\0' && ns->prefix_len > 0 &&
-                           ns->prefix[ns->prefix_len-1] == mail_namespace_get_sep(ns))
-                               vname = t_strndup(ns->prefix, ns->prefix_len - 1);
-                       else
-                               vname = t_strconcat(ns->prefix, box_set->name, NULL);
-                       mailbox_autoexpunge_set(ns, vname, box_set->autoexpunge,
-                                               box_set->autoexpunge_max_mails,
-                                               expunged_count);
-               }
+               T_BEGIN {
+                       mailbox_autoexpunge_name(ns, box_set, expunged_count);
+               } T_END;
        }
        return TRUE;
 }