From 982357f35cdadf9a823dd1b5a3c0a35bf2ecbdad Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 17 Oct 2001 22:16:46 +0000 Subject: Make sure the new description isn't the same as the old description 2001-10-17 Jeffrey Stedfast * camel-exception.c (camel_exception_set): Make sure the new description isn't the same as the old description pointer before freeing the old one. (camel_exception_setv): Don't free the old description until we set the new one this way we can reuse the old description in the new description. * providers/local/camel-mbox-folder.c (mbox_append_message): If errno == EINTR, then we got a user-cancel so set the exception appropriately so that we don't make the user shit his pants. svn path=/trunk/; revision=13737 --- camel/ChangeLog | 11 +++++++++++ camel/camel-exception.c | 13 ++++++++----- camel/providers/local/camel-mbox-folder.c | 12 ++++++++---- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index 9d7314358e..f3e5231836 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,16 @@ 2001-10-17 Jeffrey Stedfast + * camel-exception.c (camel_exception_set): Make sure the new + description isn't the same as the old description pointer before + freeing the old one. + (camel_exception_setv): Don't free the old description until we + set the new one this way we can reuse the old description in the + new description. + + * providers/local/camel-mbox-folder.c (mbox_append_message): If + errno == EINTR, then we got a user-cancel so set the exception + appropriately so that we don't make the user shit his pants. + * camel-filter-driver.c (do_copy): Add an optimization for when destination folder is the same as the source folder. diff --git a/camel/camel-exception.c b/camel/camel-exception.c index 3ae8d74f77..75400fa8df 100644 --- a/camel/camel-exception.c +++ b/camel/camel-exception.c @@ -160,9 +160,10 @@ camel_exception_set (CamelException *ex, ex->id = id; - if (ex->desc) - g_free(ex->desc); - ex->desc = g_strdup(desc); + if (desc != ex->desc) { + g_free (ex->desc); + ex->desc = g_strdup (desc); + } CAMEL_EXCEPTION_UNLOCK(exception); } @@ -195,19 +196,21 @@ camel_exception_setv (CamelException *ex, ...) { va_list args; + char *old; if (!ex) return; CAMEL_EXCEPTION_LOCK(exception); - if (ex->desc) - g_free (ex->desc); + old = ex->desc; va_start(args, format); ex->desc = g_strdup_vprintf (format, args); va_end (args); + g_free (old); + ex->id = id; CAMEL_EXCEPTION_UNLOCK(exception); diff --git a/camel/providers/local/camel-mbox-folder.c b/camel/providers/local/camel-mbox-folder.c index c7d09f4af2..0f8d8c9f74 100644 --- a/camel/providers/local/camel-mbox-folder.c +++ b/camel/providers/local/camel-mbox-folder.c @@ -261,10 +261,14 @@ mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const Camel return; fail_write: - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Cannot append message to mbox file: %s: %s"), - lf->folder_path, g_strerror (errno)); - + if (errno == EINTR) + camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, + _("Mail append cancelled")); + else + camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, + _("Cannot append message to mbox file: %s: %s"), + lf->folder_path, g_strerror (errno)); + if (filter_stream) camel_object_unref(CAMEL_OBJECT(filter_stream)); -- cgit v1.2.3