From: Timo Sirainen Date: Thu, 8 Sep 2011 08:50:23 +0000 (+0300) Subject: lib-storage: Fixed mail_storage_copy() error handling. X-Git-Tag: 2.1.alpha2~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=591aa689132dad77e4afb262618ee47d632e358f;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Fixed mail_storage_copy() error handling. --- diff --git a/src/lib-storage/mail-copy.c b/src/lib-storage/mail-copy.c index 1c66543db0..57fa7daef2 100644 --- a/src/lib-storage/mail-copy.c +++ b/src/lib-storage/mail-copy.c @@ -5,6 +5,21 @@ #include "mail-storage-private.h" #include "mail-copy.h" +static void +mail_copy_set_failed(struct mail_save_context *ctx, struct mail *mail, + const char *func) +{ + const char *errstr; + enum mail_error error; + + if (ctx->transaction->box->storage == mail->box->storage) + return; + + errstr = mail_storage_get_last_error(mail->box->storage, &error); + mail_storage_set_error(ctx->transaction->box->storage, error, + t_strdup_printf("%s (%s)", errstr, func)); +} + static int mail_storage_try_copy(struct mail_save_context **_ctx, struct mail *mail) { @@ -20,24 +35,32 @@ mail_storage_try_copy(struct mail_save_context **_ctx, struct mail *mail) to help anything. */ pmail->v.set_uid_cache_updates(mail, TRUE); - if (mail_get_stream(mail, NULL, NULL, &input) < 0) + if (mail_get_stream(mail, NULL, NULL, &input) < 0) { + mail_copy_set_failed(ctx, mail, "stream"); return -1; + } if (ctx->received_date == (time_t)-1) { - if (mail_get_received_date(mail, &received_date) < 0) + if (mail_get_received_date(mail, &received_date) < 0) { + mail_copy_set_failed(ctx, mail, "received-date"); return -1; + } mailbox_save_set_received_date(ctx, received_date, 0); } if (ctx->from_envelope == NULL) { if (mail_get_special(mail, MAIL_FETCH_FROM_ENVELOPE, - &from_envelope) < 0) + &from_envelope) < 0) { + mail_copy_set_failed(ctx, mail, "from-envelope"); return -1; + } if (*from_envelope != '\0') mailbox_save_set_from_envelope(ctx, from_envelope); } if (ctx->guid == NULL) { - if (mail_get_special(mail, MAIL_FETCH_GUID, &guid) < 0) + if (mail_get_special(mail, MAIL_FETCH_GUID, &guid) < 0) { + mail_copy_set_failed(ctx, mail, "guid"); return -1; + } if (*guid != '\0') mailbox_save_set_guid(ctx, guid); }