Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6354:8476d665530f HEAD
Changed mail_keywords creation APIs to take mailbox/index instead of
transaction.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 02 Sep 2007 07:44:50 +0300 |
parents | 23c9ac999578 |
children | 08ee6385e7a9 |
files | src/deliver/deliver.c src/imap/cmd-append.c src/imap/cmd-copy.c src/imap/cmd-store.c src/lib-index/mail-index-sync.c src/lib-index/mail-index-transaction.c src/lib-index/mail-index.h src/lib-storage/index/dbox/dbox-sync-file.c src/lib-storage/index/dbox/dbox-sync-rebuild.c src/lib-storage/index/index-storage.c src/lib-storage/index/index-storage.h src/lib-storage/index/maildir/maildir-sync-index.c src/lib-storage/index/mbox/mbox-sync.c src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.c src/lib-storage/mail-storage.h src/plugins/convert/convert-storage.c |
diffstat | 17 files changed, 62 insertions(+), 72 deletions(-) [+] |
line wrap: on
line diff
--- a/src/deliver/deliver.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/deliver/deliver.c Sun Sep 02 07:44:50 2007 +0300 @@ -142,10 +142,10 @@ t = mailbox_transaction_begin(box, MAILBOX_TRANSACTION_FLAG_EXTERNAL); kw = strarray_length(keywords) == 0 ? NULL : - mailbox_keywords_create_valid(t, keywords); + mailbox_keywords_create_valid(box, keywords); if (mailbox_copy(t, mail, flags, kw, NULL) < 0) ret = -1; - mailbox_keywords_free(t, &kw); + mailbox_keywords_free(box, &kw); if (ret < 0) mailbox_transaction_rollback(&t);
--- a/src/imap/cmd-append.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/imap/cmd-append.c Sun Sep 02 07:44:50 2007 +0300 @@ -292,7 +292,7 @@ return cmd_append_cancel(ctx, nonsync); if (keywords_list == NULL) keywords = NULL; - else if (mailbox_keywords_create(ctx->t, keywords_list, + else if (mailbox_keywords_create(ctx->box, keywords_list, &keywords) < 0) { client_send_storage_error(cmd, ctx->storage); return cmd_append_cancel(ctx, nonsync); @@ -327,7 +327,7 @@ ctx->input, FALSE, &ctx->save_ctx); if (keywords != NULL) - mailbox_keywords_free(ctx->t, &keywords); + mailbox_keywords_free(ctx->box, &keywords); if (ret < 0) { /* save initialization failed */
--- a/src/imap/cmd-copy.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/imap/cmd-copy.c Sun Sep 02 07:44:50 2007 +0300 @@ -26,7 +26,7 @@ } } -static int fetch_and_copy(struct client *client, +static int fetch_and_copy(struct client *client, struct mailbox *destbox, struct mailbox_transaction_context *t, struct mail_search_arg *search_args, const char **src_uidset_r, @@ -62,11 +62,11 @@ keywords_list = mail_get_keywords(mail); keywords = strarray_length(keywords_list) == 0 ? NULL : - mailbox_keywords_create_valid(t, keywords_list); + mailbox_keywords_create_valid(destbox, keywords_list); if (mailbox_copy(t, mail, mail_get_flags(mail), keywords, NULL) < 0) ret = mail->expunged ? 0 : -1; - mailbox_keywords_free(t, &keywords); + mailbox_keywords_free(destbox, &keywords); msgset_generator_next(&srcset_ctx, mail->uid); } @@ -132,7 +132,8 @@ t = mailbox_transaction_begin(destbox, MAILBOX_TRANSACTION_FLAG_EXTERNAL | MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS); - ret = fetch_and_copy(client, t, search_arg, &src_uidset, ©_count); + ret = fetch_and_copy(client, destbox, t, search_arg, + &src_uidset, ©_count); if (ret <= 0) mailbox_transaction_rollback(&t);
--- a/src/imap/cmd-store.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/imap/cmd-store.c Sun Sep 02 07:44:50 2007 +0300 @@ -90,7 +90,7 @@ MAILBOX_TRANSACTION_FLAG_HIDE); if (keywords_list == NULL && modify_type != MODIFY_REPLACE) keywords = NULL; - else if (mailbox_keywords_create(t, keywords_list, &keywords) < 0) { + else if (mailbox_keywords_create(box, keywords_list, &keywords) < 0) { /* invalid keywords */ mailbox_transaction_rollback(&t); client_send_storage_error(cmd, mailbox_get_storage(box)); @@ -108,7 +108,7 @@ mail_free(&mail); if (keywords != NULL) - mailbox_keywords_free(t, &keywords); + mailbox_keywords_free(box, &keywords); if (mailbox_search_deinit(&search_ctx) < 0) { failed = TRUE;
--- a/src/lib-index/mail-index-sync.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-index/mail-index-sync.c Sun Sep 02 07:44:50 2007 +0300 @@ -79,7 +79,7 @@ t_push(); keyword_names[0] = t_strndup(u + 1, u->name_size); keyword_names[1] = NULL; - keywords = mail_index_keywords_create(ctx->sync_trans, keyword_names); + keywords = mail_index_keywords_create(ctx->index, keyword_names); size = (ctx->hdr->size - uidset_offset) / sizeof(uint32_t); for (i = 0; i < size; i += 2) { @@ -101,7 +101,7 @@ struct mail_keywords *keywords; uint32_t uid; - keywords = mail_index_keywords_create(ctx->sync_trans, NULL); + keywords = mail_index_keywords_create(ctx->index, NULL); for (i = 0; i < size; i++) { for (uid = u[i].uid1; uid <= u[i].uid2; uid++) { mail_index_update_keywords(ctx->sync_trans, uid,
--- a/src/lib-index/mail-index-transaction.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-index/mail-index-transaction.c Sun Sep 02 07:44:50 2007 +0300 @@ -1131,10 +1131,9 @@ } struct mail_keywords * -mail_index_keywords_create(struct mail_index_transaction *t, +mail_index_keywords_create(struct mail_index *index, const char *const keywords[]) { - struct mail_index *index = t->view->index; struct mail_keywords *k; unsigned int src, dest, i, count; @@ -1168,7 +1167,7 @@ } struct mail_keywords * -mail_index_keywords_create_from_indexes(struct mail_index_transaction *t, +mail_index_keywords_create_from_indexes(struct mail_index *index, const ARRAY_TYPE(keyword_indexes) *keyword_indexes) { @@ -1179,14 +1178,14 @@ indexes = array_get(keyword_indexes, &count); if (count == 0) { k = i_new(struct mail_keywords, 1); - k->index = t->view->index; + k->index = index; return k; } /* @UNSAFE */ k = i_malloc(sizeof(struct mail_keywords) + (sizeof(k->idx) * (count-1))); - k->index = t->view->index; + k->index = index; /* copy but skip duplicates */ for (src = dest = 0; src < count; src++) {
--- a/src/lib-index/mail-index.h Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-index/mail-index.h Sun Sep 02 07:44:50 2007 +0300 @@ -359,17 +359,17 @@ mail_index_keywords_create() or mail_index_sync_begin(). */ const ARRAY_TYPE(keywords) *mail_index_get_keywords(struct mail_index *index); -/* Create a keyword list structure. It's freed automatically at the end of - the transaction. */ +/* Create a keyword list structure. */ struct mail_keywords * -mail_index_keywords_create(struct mail_index_transaction *t, +mail_index_keywords_create(struct mail_index *index, const char *const keywords[]); struct mail_keywords * -mail_index_keywords_create_from_indexes(struct mail_index_transaction *t, +mail_index_keywords_create_from_indexes(struct mail_index *index, const ARRAY_TYPE(keyword_indexes) *keyword_indexes); /* Free the keywords. */ void mail_index_keywords_free(struct mail_keywords **keywords); + /* Update keywords for given message. */ void mail_index_update_keywords(struct mail_index_transaction *t, uint32_t seq, enum modify_type modify_type,
--- a/src/lib-storage/index/dbox/dbox-sync-file.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/index/dbox/dbox-sync-file.c Sun Sep 02 07:44:50 2007 +0300 @@ -47,8 +47,8 @@ (old_value != NULL && *old_value != '\0' && array_count(&keyword_indexes) == 0)) { str_truncate(value, 0); - keywords = mail_index_keywords_create_from_indexes(ctx->trans, - &keyword_indexes); + keywords = mail_index_keywords_create_from_indexes( + ctx->mbox->ibox.index, &keyword_indexes); dbox_mail_metadata_keywords_append(ctx->mbox, value, keywords); mail_index_keywords_free(&keywords);
--- a/src/lib-storage/index/dbox/dbox-sync-rebuild.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/index/dbox/dbox-sync-rebuild.c Sun Sep 02 07:44:50 2007 +0300 @@ -48,7 +48,7 @@ value = dbox_file_metadata_get(file, DBOX_METADATA_KEYWORDS); if (value != NULL) { t_push(); - keywords = mail_index_keywords_create(ctx->trans, + keywords = mail_index_keywords_create(ctx->mbox->ibox.index, t_strsplit_spaces(value, " ")); mail_index_update_keywords(ctx->trans, seq, MODIFY_REPLACE, keywords);
--- a/src/lib-storage/index/index-storage.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/index/index-storage.c Sun Sep 02 07:44:50 2007 +0300 @@ -504,7 +504,7 @@ } static struct mail_keywords * -index_keywords_create_skip(struct index_transaction_context *t, +index_keywords_create_skip(struct index_mailbox *ibox, const char *const keywords[]) { ARRAY_DEFINE(valid_keywords, const char *); @@ -514,46 +514,42 @@ t_push(); t_array_init(&valid_keywords, 32); for (; *keywords != NULL; keywords++) { - if (index_mailbox_keyword_is_valid(t->ibox, *keywords, &error)) + if (index_mailbox_keyword_is_valid(ibox, *keywords, &error)) array_append(&valid_keywords, keywords, 1); } (void)array_append_space(&valid_keywords); /* NULL-terminate */ - kw = mail_index_keywords_create(t->trans, keywords); + kw = mail_index_keywords_create(ibox->index, keywords); t_pop(); return kw; } -int index_keywords_create(struct mailbox_transaction_context *_t, - const char *const keywords[], +int index_keywords_create(struct mailbox *_box, const char *const keywords[], struct mail_keywords **keywords_r, bool skip_invalid) { - struct index_transaction_context *t = - (struct index_transaction_context *)_t; + struct index_mailbox *ibox = (struct index_mailbox *)_box; const char *error; unsigned int i; for (i = 0; keywords[i] != NULL; i++) { - if (!index_mailbox_keyword_is_valid(t->ibox, keywords[i], - &error)) { - if (skip_invalid) { - /* found invalid keywords, do this the slow - way */ - *keywords_r = - index_keywords_create_skip(t, keywords); - return 0; - } - mail_storage_set_error(t->ibox->box.storage, - MAIL_ERROR_PARAMS, error); - return -1; + if (index_mailbox_keyword_is_valid(ibox, keywords[i], &error)) + continue; + + if (skip_invalid) { + /* found invalid keywords, do this the slow + way */ + *keywords_r = + index_keywords_create_skip(ibox, keywords); + return 0; } + mail_storage_set_error(_box->storage, MAIL_ERROR_PARAMS, error); + return -1; } - *keywords_r = mail_index_keywords_create(t->trans, keywords); + *keywords_r = mail_index_keywords_create(ibox->index, keywords); return 0; } -void index_keywords_free(struct mailbox_transaction_context *t __attr_unused__, - struct mail_keywords *keywords) +void index_keywords_free(struct mail_keywords *keywords) { mail_index_keywords_free(&keywords); }
--- a/src/lib-storage/index/index-storage.h Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/index/index-storage.h Sun Sep 02 07:44:50 2007 +0300 @@ -111,11 +111,9 @@ int index_mailbox_keyword_is_valid(struct index_mailbox *ibox, const char *keyword, const char **error_r); -int index_keywords_create(struct mailbox_transaction_context *t, - const char *const keywords[], +int index_keywords_create(struct mailbox *box, const char *const keywords[], struct mail_keywords **keywords_r, bool skip_invalid); -void index_keywords_free(struct mailbox_transaction_context *t, - struct mail_keywords *keywords); +void index_keywords_free(struct mail_keywords *keywords); void index_mailbox_set_recent_uid(struct index_mailbox *ibox, uint32_t uid); void index_mailbox_set_recent_seq(struct index_mailbox *ibox,
--- a/src/lib-storage/index/maildir/maildir-sync-index.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync-index.c Sun Sep 02 07:44:50 2007 +0300 @@ -338,7 +338,7 @@ struct mail_keywords *kw; kw = mail_index_keywords_create_from_indexes( - trans, &ctx->keywords); + mbox->ibox.index, &ctx->keywords); mail_index_update_keywords(trans, seq, MODIFY_REPLACE, kw); mail_index_keywords_free(&kw); @@ -417,7 +417,7 @@ struct mail_keywords *kw; kw = mail_index_keywords_create_from_indexes( - trans, &ctx->keywords); + mbox->ibox.index, &ctx->keywords); mail_index_update_keywords(trans, seq, MODIFY_REPLACE, kw); mail_index_keywords_free(&kw);
--- a/src/lib-storage/index/mbox/mbox-sync.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync.c Sun Sep 02 07:44:50 2007 +0300 @@ -290,9 +290,9 @@ struct mail_keywords *keywords; keywords = !array_is_created(&mail_ctx->mail.keywords) ? - mail_index_keywords_create(sync_ctx->t, NULL) : - mail_index_keywords_create_from_indexes(sync_ctx->t, - &mail_ctx->mail.keywords); + mail_index_keywords_create(sync_ctx->mbox->ibox.index, NULL) : + mail_index_keywords_create_from_indexes( + sync_ctx->mbox->ibox.index, &mail_ctx->mail.keywords); mail_index_update_keywords(sync_ctx->t, sync_ctx->idx_seq, MODIFY_REPLACE, keywords); mail_index_keywords_free(&keywords);
--- a/src/lib-storage/mail-storage-private.h Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/mail-storage-private.h Sun Sep 02 07:44:50 2007 +0300 @@ -117,12 +117,11 @@ uint32_t *last_saved_uid_r); void (*transaction_rollback)(struct mailbox_transaction_context *t); - int (*keywords_create)(struct mailbox_transaction_context *t, + int (*keywords_create)(struct mailbox *box, const char *const keywords[], struct mail_keywords **keywords_r, bool skip_invalid); - void (*keywords_free)(struct mailbox_transaction_context *t, - struct mail_keywords *keywords); + void (*keywords_free)(struct mail_keywords *keywords); void (*get_uids)(struct mailbox *box, uint32_t uid1, uint32_t uid2, uint32_t *seq1_r, uint32_t *seq2_r);
--- a/src/lib-storage/mail-storage.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/mail-storage.c Sun Sep 02 07:44:50 2007 +0300 @@ -537,19 +537,18 @@ mailbox_notify_changes(box, 0, NULL, NULL); } -int mailbox_keywords_create(struct mailbox_transaction_context *t, - const char *const keywords[], +int mailbox_keywords_create(struct mailbox *box, const char *const keywords[], struct mail_keywords **keywords_r) { const char *empty_keyword_list = NULL; if (keywords == NULL) keywords = &empty_keyword_list; - return t->box->v.keywords_create(t, keywords, keywords_r, FALSE); + return box->v.keywords_create(box, keywords, keywords_r, FALSE); } struct mail_keywords * -mailbox_keywords_create_valid(struct mailbox_transaction_context *t, +mailbox_keywords_create_valid(struct mailbox *box, const char *const keywords[]) { const char *empty_keyword_list = NULL; @@ -557,18 +556,18 @@ if (keywords == NULL) keywords = &empty_keyword_list; - if (t->box->v.keywords_create(t, keywords, &kw, TRUE) < 0) + if (box->v.keywords_create(box, keywords, &kw, TRUE) < 0) i_unreached(); return kw; } -void mailbox_keywords_free(struct mailbox_transaction_context *t, +void mailbox_keywords_free(struct mailbox *box, struct mail_keywords **_keywords) { struct mail_keywords *keywords = *_keywords; *_keywords = NULL; - t->box->v.keywords_free(t, keywords); + box->v.keywords_free(keywords); } void mailbox_get_uids(struct mailbox *box, uint32_t uid1, uint32_t uid2,
--- a/src/lib-storage/mail-storage.h Sun Sep 02 06:10:54 2007 +0300 +++ b/src/lib-storage/mail-storage.h Sun Sep 02 07:44:50 2007 +0300 @@ -324,14 +324,13 @@ /* Build mail_keywords from NULL-terminated keywords list. Returns 0 if successful, -1 if there are invalid keywords (error is set). */ -int mailbox_keywords_create(struct mailbox_transaction_context *t, - const char *const keywords[], +int mailbox_keywords_create(struct mailbox *box, const char *const keywords[], struct mail_keywords **keywords_r); /* Like mailbox_keywords_create(), except ignore invalid keywords. */ struct mail_keywords * -mailbox_keywords_create_valid(struct mailbox_transaction_context *t, +mailbox_keywords_create_valid(struct mailbox *box, const char *const keywords[]); -void mailbox_keywords_free(struct mailbox_transaction_context *t, +void mailbox_keywords_free(struct mailbox *box, struct mail_keywords **keywords); /* Convert uid range to sequence range. */
--- a/src/plugins/convert/convert-storage.c Sun Sep 02 06:10:54 2007 +0300 +++ b/src/plugins/convert/convert-storage.c Sun Sep 02 07:44:50 2007 +0300 @@ -72,12 +72,11 @@ keywords_list = mail_get_keywords(mail); keywords = strarray_length(keywords_list) == 0 ? NULL : - mailbox_keywords_create_valid(dest_trans, - keywords_list); + mailbox_keywords_create_valid(destbox, keywords_list); ret = mailbox_copy(dest_trans, mail, mail_get_flags(mail), keywords, NULL); - mailbox_keywords_free(dest_trans, &keywords); + mailbox_keywords_free(destbox, &keywords); if (ret < 0) break; }