mailbox-attribute.c revision e8f12bf524412d1ca2e60cc694a2b9487ed206d1
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* Copyright (c) 2003-2015 Dovecot authors, see the included COPYING file */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisstatic ARRAY(struct mailbox_attribute_internal) mailbox_internal_attributes;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis pool_alloconly_create("mailbox attributes", 2048);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis i_array_init(&mailbox_internal_attributes, 32);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Internal attributes
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis const struct mailbox_attribute_internal *reg1,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis const struct mailbox_attribute_internal *reg2)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis const struct mailbox_attribute_internal *iattr)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis (void)array_bsearch_insert_pos(&mailbox_internal_attributes,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis iattr, mailbox_attribute_internal_cmp, &insert_idx);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ireg.key = p_strdup(mailbox_attribute_pool, iattr->key);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis array_insert(&mailbox_internal_attributes, insert_idx, &ireg, 1);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisstatic const struct mailbox_attribute_internal *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtismailbox_internal_attribute_get(enum mail_attribute_type type,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis const struct mailbox_attribute_internal *iattr;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if (array_bsearch_insert_pos(&mailbox_internal_attributes,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* exact match */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis return array_idx(&mailbox_internal_attributes, insert_idx);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* not found at all */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis iattr = array_idx(&mailbox_internal_attributes, insert_idx-1);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if (strncmp(iattr->key, key, strlen(iattr->key)) != 0) {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* iattr isn't a prefix of key */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis } else if ((iattr->flags & MAIL_ATTRIBUTE_INTERNAL_FLAG_CHILDREN) != 0) {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* iattr is a prefix of key and it wants to handle the key */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtismailbox_internal_attributes_get(enum mail_attribute_type type,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis const char *prefix, ARRAY_TYPE(const_string) *attrs)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis const struct mailbox_attribute_internal *regs;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis unsigned int count, i;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if (plen > 0 && bare_prefix[plen-1] == '/') {
plen--;
for (; i < count; i++) {
if (plen > 0) {
int ret;
i_unreached();
return ret;
const char **str_r)
const unsigned char *data;
int ret;
if (ret < 0)
return ret;
i_unreached();
if (ret != 0)
return ret;
ret = 0;
return ret;
if (ret > 0) {
i_unreached();
int ret;
return ret;
int ret;
return ret;
struct mailbox_attribute_internal_iter {
unsigned int extra_attr_idx;
struct mailbox_attribute_iter *
const char *const *attr;
return iter;
const char *const *attrs;
unsigned int count, i;
const char *result;
for (i = 0; i < count; i++) {
if (i == count) {
return result;
return NULL;
int ret;
return ret;