#include "imap-storage-callbacks.h"
#include "mail-storage.h"
#include "time-util.h"
+#include "settings-parser.h"
#include <time.h>
const struct mailbox_settings *set;
set = mailbox_get_settings(box);
- if (set != NULL && set->special_use[0] != '\0' &&
- str_array_icase_find(t_strsplit_spaces(set->special_use, " "),
+ if (set != NULL && array_not_empty(&set->special_use) &&
+ str_array_icase_find(settings_boollist_get(&set->special_use),
"\\Trash"))
client->trashed_count += count;
}
match = imap_match(ctx->glob, actx->new_info.vname);
if (match == IMAP_MATCH_YES) {
actx->new_info.special_use =
- *autobox->set->special_use == '\0' ? NULL :
- autobox->set->special_use;
+ array_is_empty(&autobox->set->special_use) ? NULL :
+ t_array_const_string_join(&autobox->set->special_use, " ");
return TRUE;
}
if ((match & IMAP_MATCH_PARENT) != 0 && !autobox->child_listed) {
ctx->failed = TRUE;
return NULL;
}
- if (*set->special_use != '\0') {
+ if (array_not_empty(&set->special_use)) {
ctx->specialuse_info = *info;
ctx->specialuse_info.special_use =
- *set->special_use == '\0' ? NULL :
- set->special_use;
+ t_array_const_string_join(&set->special_use, " ");
info = &ctx->specialuse_info;
}
settings_free(set);
DEF(STR, name),
{ .type = SET_ENUM, .key = "mailbox_auto",
.offset = offsetof(struct mailbox_settings, autocreate) } ,
- DEF(STR, special_use),
+ DEF(BOOLLIST, special_use),
DEF(STR, comment),
DEF(TIME, autoexpunge),
DEF(UINT, autoexpunge_max_mails),
.autocreate = MAILBOX_SET_AUTO_NO":"
MAILBOX_SET_AUTO_CREATE":"
MAILBOX_SET_AUTO_SUBSCRIBE,
- .special_use = "",
+ .special_use = ARRAY_INIT,
.comment = "",
.autoexpunge = 0,
.autoexpunge_max_mails = 0
box_name, error);
break;
}
- bool have_special_use = box_set->special_use[0] != '\0';
+ bool have_special_use = array_not_empty(&box_set->special_use);
settings_free(box_set);
if (have_special_use) {
ret = 1;
}
static void
-mailbox_special_use_check(struct mailbox_settings *set, pool_t pool)
+mailbox_special_use_check(struct mailbox_settings *set)
{
- const char *const *uses, *str;
+ const char *const *uses;
unsigned int i;
- uses = t_strsplit_spaces(set->special_use, " ");
+ uses = settings_boollist_get(&set->special_use);
for (i = 0; uses[i] != NULL; i++) {
if (!mailbox_special_use_exists(uses[i])) {
i_warning("mailbox %s: special_use label %s is not an "
set->name, uses[i]);
}
}
- /* make sure there are no extra spaces */
- str = t_strarray_join(uses, " ");
- if (strcmp(str, set->special_use) != 0)
- set->special_use = p_strdup(pool, str);
}
-static bool mailbox_settings_check(void *_set, pool_t pool,
+static bool mailbox_settings_check(void *_set, pool_t pool ATTR_UNUSED,
const char **error_r)
{
struct mailbox_settings *set = _set;
set->name);
return FALSE;
}
- if (*set->special_use != '\0') {
- mailbox_special_use_check(set, pool);
- }
+ mailbox_special_use_check(set);
return TRUE;
}
pool_t pool;
const char *name;
const char *autocreate;
- const char *special_use;
+ ARRAY_TYPE(const_string) special_use;
const char *comment;
unsigned int autoexpunge;
unsigned int autoexpunge_max_mails;
{
if (box->set == NULL)
return FALSE;
- return str_contains_special_use(box->set->special_use, special_use);
+ return str_contains_special_use(t_array_const_string_join(&box->set->special_use, " "),
+ special_use);
}
static void mailbox_copy_cache_decisions_from_inbox(struct mailbox *box)
/* Copyright (c) 2003-2018 Dovecot authors, see the included COPYING file */
#include "lib.h"
+#include "array.h"
#include "mail-storage-private.h"
#include "mailbox-attribute-internal.h"
{
const struct mailbox_settings *set = box->set;
- if (set == NULL || *set->special_use == '\0')
+ if (set == NULL || array_is_empty(&set->special_use))
return 0;
- value_r->value = set->special_use;
+ value_r->value = t_array_const_string_join(&set->special_use, " ");
return 1;
}