From: Timo Sirainen Date: Thu, 14 Mar 2019 16:58:14 +0000 (+0200) Subject: lib-storage: Add mailbox_keywords_merge() X-Git-Tag: 2.3.8~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9112dfb1af5ed281c7e827d36549a29766adf310;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add mailbox_keywords_merge() --- diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index 2fb36acdb9..d901b6778b 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -772,6 +772,10 @@ mailbox_keywords_create_valid(struct mailbox *box, struct mail_keywords * mailbox_keywords_create_from_indexes(struct mailbox *box, const ARRAY_TYPE(keyword_indexes) *idx); +/* Return union of two mail_keywords. They must be created in the same + mailbox. */ +struct mail_keywords *mailbox_keywords_merge(struct mail_keywords *keywords1, + struct mail_keywords *keywords2); void mailbox_keywords_ref(struct mail_keywords *keywords); void mailbox_keywords_unref(struct mail_keywords **keywords); /* Returns TRUE if keyword is valid, FALSE and error if not. */ diff --git a/src/lib-storage/mailbox-keywords.c b/src/lib-storage/mailbox-keywords.c index dce4ae4dac..78e85291e0 100644 --- a/src/lib-storage/mailbox-keywords.c +++ b/src/lib-storage/mailbox-keywords.c @@ -84,6 +84,21 @@ mailbox_keywords_create_from_indexes(struct mailbox *box, return mail_index_keywords_create_from_indexes(box->index, idx); } +struct mail_keywords *mailbox_keywords_merge(struct mail_keywords *keywords1, + struct mail_keywords *keywords2) +{ + ARRAY_TYPE(keyword_indexes) keywords_merged; + + i_assert(keywords1->index == keywords2->index); + + t_array_init(&keywords_merged, keywords1->count + keywords2->count); + /* duplicates are dropped by mail_index_keywords_create() */ + array_append(&keywords_merged, keywords1->idx, keywords1->count); + array_append(&keywords_merged, keywords2->idx, keywords2->count); + return mail_index_keywords_create_from_indexes(keywords1->index, + &keywords_merged); +} + void mailbox_keywords_ref(struct mail_keywords *keywords) { mail_index_keywords_ref(keywords);