Mercurial > dovecot > original-hg > dovecot-1.2
changeset 507:eebb12795ea7 HEAD
Error message fixes for APPEND. Make sure we don't crash if sync_callbacks
isn't set. Don't set sync_callbacks until SELECT is finished.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 25 Oct 2002 04:59:36 +0300 |
parents | 0329dd6cd40e |
children | d97b0454692e |
files | src/imap/cmd-select.c src/lib-storage/index/index-save.c src/lib-storage/index/index-sync.c |
diffstat | 3 files changed, 19 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-select.c Fri Oct 25 04:58:43 2002 +0300 +++ b/src/imap/cmd-select.c Fri Oct 25 04:59:36 2002 +0300 @@ -35,6 +35,8 @@ return TRUE; } + /* set callbacks after STATUS, which might otherwise try calling + some of them */ box->set_sync_callbacks(box, &sync_callbacks, client); client_send_mailbox_flags(client, box, status.custom_flags, @@ -63,6 +65,7 @@ client_send_tagline(client, box->readonly ? "OK [READ-ONLY] Select completed." : "OK [READ-WRITE] Select completed."); + return TRUE; }
--- a/src/lib-storage/index/index-save.c Fri Oct 25 04:58:43 2002 +0300 +++ b/src/lib-storage/index/index-save.c Fri Oct 25 04:59:36 2002 +0300 @@ -85,8 +85,14 @@ while (data_size > 0) { ret = i_buffer_read(inbuf); if (ret < 0) { - mail_storage_set_critical(storage, - "Error reading mail: %m"); + errno = inbuf->buf_errno; + if (errno == 0) { + mail_storage_set_error(storage, + "Client disconnected"); + } else { + mail_storage_set_critical(storage, + "Error reading mail from client: %m"); + } return FALSE; } @@ -97,6 +103,7 @@ if (!failed) { ret = write_func(outbuf, data, size); if (ret < 0) { + errno = outbuf->buf_errno; if (errno == ENOSPC) { mail_storage_set_error(storage, "Not enough disk space");
--- a/src/lib-storage/index/index-sync.c Fri Oct 25 04:58:43 2002 +0300 +++ b/src/lib-storage/index/index-sync.c Fri Oct 25 04:59:36 2002 +0300 @@ -10,6 +10,9 @@ { unsigned int messages, recent; + if (ibox->sync_callbacks.new_messages == NULL) + return; + messages = ibox->index->get_header(ibox->index)->messages_count; messages += mail_modifylog_get_expunge_count(ibox->index->modifylog); @@ -39,7 +42,8 @@ } /* notify client once about it */ - if (!ibox->sent_diskspace_warning) { + if (!ibox->sent_diskspace_warning && + ibox->sync_callbacks.alert_no_diskspace != NULL) { ibox->sent_diskspace_warning = TRUE; ibox->sync_callbacks.alert_no_diskspace( &ibox->box, ibox->sync_context); @@ -56,7 +60,8 @@ index_storage_sync_size(ibox); /* notify changes in custom flags */ - if (mail_custom_flags_has_changes(index->custom_flags)) { + if (mail_custom_flags_has_changes(index->custom_flags) && + ibox->sync_callbacks.new_custom_flags != NULL) { ibox->sync_callbacks.new_custom_flags(&ibox->box, mail_custom_flags_list_get(index->custom_flags), MAIL_CUSTOM_FLAGS_COUNT, ibox->sync_context);