From: Timo Sirainen Date: Tue, 27 Dec 2022 16:24:34 +0000 (+0200) Subject: lib-storage: Autoexpunge each mailbox in its own data stack frame X-Git-Tag: 2.4.0~3216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a7a4073e8310e74b2d8ace3a1d3f0d26292e50c;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Autoexpunge each mailbox in its own data stack frame --- diff --git a/src/lib-storage/mail-autoexpunge.c b/src/lib-storage/mail-autoexpunge.c index 9ab2809fdc..efdd11b637 100644 --- a/src/lib-storage/mail-autoexpunge.c +++ b/src/lib-storage/mail-autoexpunge.c @@ -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; }