dovecot: mail_index_lookup*() can't fail anymore. Changed severa...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Aug 12 18:03:06 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/5f66277bbe40
changeset: 6277:5f66277bbe40
user: Timo Sirainen <tss at iki.fi>
date: Sun Aug 12 18:02:29 2007 +0300
description:
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
failure anymore.
diffstat:
42 files changed, 459 insertions(+), 570 deletions(-)
src/deliver/deliver.c | 3
src/imap/cmd-store.c | 27 +---
src/imap/imap-expunge.c | 19 --
src/imap/imap-fetch.c | 3
src/imap/imap-sync.c | 6
src/imap/imap-thread.c | 3
src/lib-index/mail-cache-lookup.c | 5
src/lib-index/mail-index-sync.c | 10 -
src/lib-index/mail-index-transaction-view.c | 54 ++++----
src/lib-index/mail-index-transaction.c | 4
src/lib-index/mail-index-view-private.h | 12 -
src/lib-index/mail-index-view.c | 135 ++++++++++----------
src/lib-index/mail-index.h | 41 +++---
src/lib-storage/index/cydir/cydir-save.c | 3
src/lib-storage/index/dbox/dbox-file.c | 21 +--
src/lib-storage/index/dbox/dbox-save.c | 3
src/lib-storage/index/index-mail.c | 71 ++++------
src/lib-storage/index/index-mail.h | 14 +-
src/lib-storage/index/index-search.c | 28 +---
src/lib-storage/index/index-sort.c | 62 +++------
src/lib-storage/index/index-sort.h | 10 -
src/lib-storage/index/maildir/maildir-save.c | 3
src/lib-storage/index/maildir/maildir-sync-index.c | 26 +--
src/lib-storage/index/mbox/mbox-file.c | 14 --
src/lib-storage/index/mbox/mbox-save.c | 3
src/lib-storage/index/mbox/mbox-sync-parse.c | 11 -
src/lib-storage/index/mbox/mbox-sync-private.h | 4
src/lib-storage/index/mbox/mbox-sync.c | 133 ++++++-------------
src/lib-storage/list/index-mailbox-list-sync.c | 20 +-
src/lib-storage/list/index-mailbox-list.c | 4
src/lib-storage/mail-storage-private.h | 15 +-
src/lib-storage/mail-storage.h | 17 +-
src/lib-storage/mail.c | 20 +-
src/plugins/acl/acl-mailbox.c | 83 ++++++++----
src/plugins/expire/expire-plugin.c | 45 ++----
src/plugins/expire/expire-tool.c | 13 -
src/plugins/fts/fts-storage.c | 8 -
src/plugins/lazy-expunge/lazy-expunge-plugin.c | 27 ++--
src/plugins/mail-log/mail-log-plugin.c | 19 +-
src/plugins/quota/quota-storage.c | 9 -
src/plugins/trash/trash-plugin.c | 4
src/pop3/commands.c | 17 --
diffs (truncated from 2293 to 300 lines):
diff -r b5a23c868935 -r 5f66277bbe40 src/deliver/deliver.c
--- a/src/deliver/deliver.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/deliver/deliver.c Sun Aug 12 18:02:29 2007 +0300
@@ -749,8 +749,7 @@ int main(int argc, char *argv[])
t = mailbox_transaction_begin(box, 0);
mail = mail_alloc(t, 0, NULL);
- if (mail_set_seq(mail, 1) < 0)
- i_fatal("mail_set_seq() failed");
+ mail_set_seq(mail, 1);
storage = NULL;
default_mailbox_name = mailbox;
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/cmd-store.c
--- a/src/imap/cmd-store.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/cmd-store.c Sun Aug 12 18:02:29 2007 +0300
@@ -92,36 +92,23 @@ bool cmd_store(struct client_command_con
mailbox_keywords_create(t, keywords_list) : NULL;
search_ctx = mailbox_search_init(t, NULL, search_arg, NULL);
- failed = FALSE;
mail = mail_alloc(t, MAIL_FETCH_FLAGS, NULL);
while (mailbox_search_next(search_ctx, mail) > 0) {
- if (modify_type == MODIFY_REPLACE || flags != 0) {
- if (mail_update_flags(mail, modify_type, flags) < 0) {
- failed = TRUE;
- break;
- }
- }
- if (modify_type == MODIFY_REPLACE || keywords != NULL) {
- if (mail_update_keywords(mail, modify_type,
- keywords) < 0) {
- failed = TRUE;
- break;
- }
- }
+ if (modify_type == MODIFY_REPLACE || flags != 0)
+ mail_update_flags(mail, modify_type, flags);
+ if (modify_type == MODIFY_REPLACE || keywords != NULL)
+ mail_update_keywords(mail, modify_type, keywords);
}
mail_free(&mail);
if (keywords != NULL)
mailbox_keywords_free(t, &keywords);
- if (mailbox_search_deinit(&search_ctx) < 0)
+ if (mailbox_search_deinit(&search_ctx) < 0) {
failed = TRUE;
-
- if (failed)
mailbox_transaction_rollback(&t);
- else {
- if (mailbox_transaction_commit(&t, 0) < 0)
- failed = TRUE;
+ } else {
+ failed = mailbox_transaction_commit(&t, 0) < 0;
}
if (!failed) {
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-expunge.c
--- a/src/imap/imap-expunge.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-expunge.c Sun Aug 12 18:02:29 2007 +0300
@@ -12,7 +12,7 @@ bool imap_expunge(struct mailbox *box, s
struct mail *mail;
struct mail_search_arg search_arg;
enum mailbox_sync_flags flags;
- bool failed = FALSE;
+ bool failed;
if (mailbox_is_readonly(box)) {
/* silently ignore */
@@ -27,24 +27,17 @@ bool imap_expunge(struct mailbox *box, s
ctx = mailbox_search_init(t, NULL, &search_arg, NULL);
mail = mail_alloc(t, 0, NULL);
- while (mailbox_search_next(ctx, mail) > 0) {
- if (mail_expunge(mail) < 0) {
- failed = TRUE;
- break;
- }
- }
+ while (mailbox_search_next(ctx, mail) > 0)
+ mail_expunge(mail);
mail_free(&mail);
- if (mailbox_search_deinit(&ctx) < 0)
+ if (mailbox_search_deinit(&ctx) < 0) {
failed = TRUE;
-
- if (failed)
mailbox_transaction_rollback(&t);
- else {
+ } else {
flags = MAILBOX_SYNC_FLAG_FULL_READ |
MAILBOX_SYNC_FLAG_FULL_WRITE;
- if (mailbox_transaction_commit(&t, flags) < 0)
- failed = TRUE;
+ failed = mailbox_transaction_commit(&t, flags) < 0;
}
return !failed;
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-fetch.c
--- a/src/imap/imap-fetch.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-fetch.c Sun Aug 12 18:02:29 2007 +0300
@@ -514,8 +514,7 @@ static int fetch_flags(struct imap_fetch
if (ctx->flags_update_seen && (flags & MAIL_SEEN) == 0) {
/* Add \Seen flag */
flags |= MAIL_SEEN;
- if (mail_update_flags(mail, MODIFY_ADD, MAIL_SEEN) < 0)
- return -1;
+ mail_update_flags(mail, MODIFY_ADD, MAIL_SEEN);
} else if (ctx->flags_show_only_seen_changes) {
return 1;
}
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-sync.c
--- a/src/imap/imap-sync.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-sync.c Sun Aug 12 18:02:29 2007 +0300
@@ -143,11 +143,7 @@ int imap_sync_more(struct imap_sync_cont
if (ret <= 0)
break;
- if (mail_set_seq(ctx->mail, ctx->seq) < 0) {
- t_pop();
- return -1;
- }
-
+ mail_set_seq(ctx->mail, ctx->seq);
flags = mail_get_flags(ctx->mail);
keywords = mail_get_keywords(ctx->mail);
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-thread.c
--- a/src/imap/imap-thread.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-thread.c Sun Aug 12 18:02:29 2007 +0300
@@ -691,7 +691,8 @@ static void gather_base_subjects(struct
else
mailbox_get_uids(ctx->box, id, id, &seq, &seq);
- if (seq != 0 && mail_set_seq(ctx->mail, seq) == 0) {
+ if (seq != 0) {
+ mail_set_seq(ctx->mail, seq);
t_push();
subject = mail_get_first_header(ctx->mail, "subject");
add_base_subject(ctx, subject, node);
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-cache-lookup.c
--- a/src/lib-index/mail-cache-lookup.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/lib-index/mail-cache-lookup.c Sun Aug 12 18:02:29 2007 +0300
@@ -57,9 +57,8 @@ mail_cache_lookup_offset(struct mail_cac
uint32_t reset_id;
int i, ret;
- if (mail_index_lookup_ext_full(view, seq, cache->ext_id,
- &map, &data) < 0)
- return -1;
+ mail_index_lookup_ext_full(view, seq, cache->ext_id,
+ &map, &data, NULL);
if (data == NULL || *((const uint32_t *)data) == 0) {
/* nothing in cache (for this record) */
return 0;
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-index-sync.c
--- a/src/lib-index/mail-index-sync.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/lib-index/mail-index-sync.c Sun Aug 12 18:02:29 2007 +0300
@@ -149,7 +149,7 @@ static bool mail_index_sync_add_transact
return TRUE;
}
-static int mail_index_sync_add_dirty_updates(struct mail_index_sync_ctx *ctx)
+static void mail_index_sync_add_dirty_updates(struct mail_index_sync_ctx *ctx)
{
struct mail_transaction_flag_update update;
const struct mail_index_record *rec;
@@ -159,16 +159,13 @@ static int mail_index_sync_add_dirty_upd
messages_count = mail_index_view_get_messages_count(ctx->view);
for (seq = 1; seq <= messages_count; seq++) {
- if (mail_index_lookup(ctx->view, seq, &rec) < 0)
- return -1;
-
+ rec = mail_index_lookup(ctx->view, seq);
if ((rec->flags & MAIL_INDEX_MAIL_FLAG_DIRTY) == 0)
continue;
mail_index_update_flags(ctx->sync_trans, rec->uid,
MODIFY_REPLACE, rec->flags);
}
- return 0;
}
static void
@@ -196,8 +193,7 @@ mail_index_sync_read_and_sort(struct mai
if ((ctx->view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) &&
(ctx->flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) {
/* show dirty flags as flag updates */
- if (mail_index_sync_add_dirty_updates(ctx) < 0)
- return -1;
+ mail_index_sync_add_dirty_updates(ctx);
}
/* read all transactions from log into a transaction in memory.
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-index-transaction-view.c
--- a/src/lib-index/mail-index-transaction-view.c Sun Aug 12 16:50:47 2007 +0300
+++ b/src/lib-index/mail-index-transaction-view.c Sun Aug 12 18:02:29 2007 +0300
@@ -60,30 +60,29 @@ _tview_get_header(struct mail_index_view
return hdr;
}
-static int _tview_lookup_full(struct mail_index_view *view, uint32_t seq,
- struct mail_index_map **map_r,
- const struct mail_index_record **rec_r)
-{
- struct mail_index_view_transaction *tview =
- (struct mail_index_view_transaction *)view;
- int ret;
+static const struct mail_index_record *
+_tview_lookup_full(struct mail_index_view *view, uint32_t seq,
+ struct mail_index_map **map_r, bool *expunged_r)
+{
+ struct mail_index_view_transaction *tview =
+ (struct mail_index_view_transaction *)view;
+ const struct mail_index_record *rec;
if (seq >= tview->t->first_new_seq) {
/* FIXME: is this right to return index map..?
it's not there yet. */
*map_r = view->index->map;
- *rec_r = mail_index_transaction_lookup(tview->t, seq);
- return 1;
- }
-
- ret = tview->super->lookup_full(view, seq, map_r, rec_r);
- if (ret <= 0)
- return ret;
+ *expunged_r = FALSE;
+ return mail_index_transaction_lookup(tview->t, seq);
+ }
+
+ rec = tview->super->lookup_full(view, seq, map_r, expunged_r);
/* if we're expunged within this transaction, return 0 */
- return array_is_created(&tview->t->expunges) &&
- seq_range_exists(&tview->t->expunges, seq) ? 0 : 1;
-
+ if (array_is_created(&tview->t->expunges) &&
+ seq_range_exists(&tview->t->expunges, seq))
+ *expunged_r = TRUE;
+ return rec;
}
static void _tview_lookup_uid(struct mail_index_view *view, uint32_t seq,
@@ -176,10 +175,10 @@ tview_get_lookup_map(struct mail_index_v
return tview->lookup_map;
}
-static int
+static void
_tview_lookup_ext_full(struct mail_index_view *view, uint32_t seq,
uint32_t ext_id, struct mail_index_map **map_r,
- const void **data_r)
+ const void **data_r, bool *expunged_r)
{
struct mail_index_view_transaction *tview =
(struct mail_index_view_transaction *)view;
@@ -188,6 +187,8 @@ _tview_lookup_ext_full(struct mail_index
unsigned int idx;
i_assert(ext_id < array_count(&view->index->extensions));
+
+ *expunged_r = FALSE;
if (array_is_created(&tview->t->ext_rec_updates) &&
ext_id < array_count(&tview->t->ext_rec_updates)) {
@@ -199,19 +200,18 @@ _tview_lookup_ext_full(struct mail_index
data = array_idx(ext_buf, idx);
*map_r = tview_get_lookup_map(tview);
*data_r = CONST_PTR_OFFSET(data, sizeof(uint32_t));
- return 1;
+ return;
}
}
/* not updated, return the existing value */
if (seq < tview->t->first_new_seq) {
- return tview->super->lookup_ext_full(view, seq, ext_id,
- map_r, data_r);
- }
-
- *map_r = view->index->map;
- *data_r = NULL;
- return 1;
+ tview->super->lookup_ext_full(view, seq, ext_id,
+ map_r, data_r, expunged_r);
+ } else {
+ *map_r = view->index->map;
+ *data_r = NULL;
+ }
}
static void _tview_get_header_ext(struct mail_index_view *view,
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-index-transaction.c
--- a/src/lib-index/mail-index-transaction.c Sun Aug 12 16:50:47 2007 +0300
More information about the dovecot-cvs
mailing list