From 0676d2890e8def5d8876da6784df4e673b0703a1 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 14 Sep 2001 01:44:18 +0000 Subject: Don't reuse the exception if it has already been set. 2001-09-13 Jeffrey Stedfast * camel-filter-driver.c (camel_filter_driver_filter_folder): Don't reuse the exception if it has already been set. (camel_filter_driver_filter_message): Same here. Also use the new return value from camel_filter_search_match(). * camel-filter-search.c (camel_filter_search_match): Return an integer (matched, no-match, or error). svn path=/trunk/; revision=12819 --- camel/ChangeLog | 8 ++++++++ camel/camel-filter-driver.c | 25 ++++++++++++++++--------- camel/camel-filter-search.c | 19 +++++++++++++++---- camel/camel-filter-search.h | 10 ++++++++-- camel/camel.c | 2 ++ 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index b4b8ef8338..c5b5f3467f 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,13 @@ 2001-09-13 Jeffrey Stedfast + * camel-filter-driver.c (camel_filter_driver_filter_folder): Don't + reuse the exception if it has already been set. + (camel_filter_driver_filter_message): Same here. Also use the new + return value from camel_filter_search_match(). + + * camel-filter-search.c (camel_filter_search_match): Return an + integer (matched, no-match, or error). + * providers/local/camel-mbox-folder.c (mbox_append_message): Do error-checking based on function return values rather than exceptions as it's possible for them to be NULL. diff --git a/camel/camel-filter-driver.c b/camel/camel-filter-driver.c index 31bc40f4b6..e7a430cdff 100644 --- a/camel/camel-filter-driver.c +++ b/camel/camel-filter-driver.c @@ -812,7 +812,7 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde if (p->defaultfolder) { report_status (driver, CAMEL_FILTER_STATUS_PROGRESS, 100, _("Syncing folder")); - camel_folder_sync (p->defaultfolder, FALSE, ex); + camel_folder_sync (p->defaultfolder, FALSE, camel_exception_is_set (ex) ? NULL : ex); } if (i == uids->len) @@ -853,10 +853,11 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage CamelException *ex) { struct _CamelFilterDriverPrivate *p = _PRIVATE (driver); - ESExpResult *r; struct _filter_rule *node; gboolean freeinfo = FALSE; gboolean filtered = FALSE; + ESExpResult *r; + int result; if (info == NULL) { struct _header_raw *h = CAMEL_MIME_PART (message)->headers; @@ -881,12 +882,15 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage camel_mime_message_set_source (message, original_source_url); node = (struct _filter_rule *)p->rules.head; - while (node->next) { + result = CAMEL_SEARCH_NOMATCH; + while (node->next && result != CAMEL_SEARCH_ERROR) { d(fprintf (stderr, "applying rule %s\naction %s\n", node->match, node->action)); - if (camel_filter_search_match (p->message, p->info, - original_source_url ? original_source_url : source_url, - node->match, p->ex)) { + result = camel_filter_search_match (p->message, p->info, + original_source_url ? original_source_url : source_url, + node->match, p->ex); + + if (result == CAMEL_SEARCH_MATCHED) { filtered = TRUE; camel_filter_driver_log (driver, FILTER_LOG_START, node->name); @@ -925,10 +929,13 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage uids = g_ptr_array_new (); g_ptr_array_add (uids, (char *) p->uid); - camel_folder_copy_messages_to (p->source, uids, p->defaultfolder, p->ex); + camel_folder_copy_messages_to (p->source, uids, p->defaultfolder, + result == CAMEL_SEARCH_ERROR ? NULL : p->ex); g_ptr_array_free (uids, TRUE); - } else - camel_folder_append_message (p->defaultfolder, p->message, p->info, p->ex); + } else { + camel_folder_append_message (p->defaultfolder, p->message, p->info, + result == CAMEL_SEARCH_ERROR ? NULL : p->ex); + } } if (freeinfo) diff --git a/camel/camel-filter-search.c b/camel/camel-filter-search.c index 9cbb87cce6..d6d60e2cf3 100644 --- a/camel/camel-filter-search.c +++ b/camel/camel-filter-search.c @@ -438,7 +438,18 @@ get_size (struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterMessageS return r; } -gboolean + +/** + * camel_filter_search_match: + * @message: + * @info: + * @source: + * @expression: + * @ex: + * + * Returns one of CAMEL_SEARCH_MATCHED, CAMEL_SEARCH_NOMATCH, or CAMEL_SEARCH_ERROR. + **/ +int camel_filter_search_match (CamelMimeMessage *message, CamelMessageInfo *info, const char *source, const char *expression, CamelException *ex) { @@ -478,9 +489,9 @@ camel_filter_search_match (CamelMimeMessage *message, CamelMessageInfo *info, } if (result->type == ESEXP_RES_BOOL) - retval = result->value.bool; + retval = result->value.bool ? CAMEL_SEARCH_MATCHED : CAMEL_SEARCH_NOMATCH; else - retval = FALSE; + retval = CAMEL_SEARCH_NOMATCH; e_sexp_result_free (sexp, result); e_sexp_unref (sexp); @@ -489,5 +500,5 @@ camel_filter_search_match (CamelMimeMessage *message, CamelMessageInfo *info, error: e_sexp_unref (sexp); - return FALSE; + return CAMEL_SEARCH_ERROR; } diff --git a/camel/camel-filter-search.h b/camel/camel-filter-search.h index 1482f70539..eb1ad2e47d 100644 --- a/camel/camel-filter-search.h +++ b/camel/camel-filter-search.h @@ -34,8 +34,14 @@ extern "C" { #include #include -gboolean camel_filter_search_match(CamelMimeMessage *message, CamelMessageInfo *info, - const char *source, const char *expression, CamelException *ex); +enum { + CAMEL_SEARCH_ERROR = -1, + CAMEL_SEARCH_NOMATCH = 0, + CAMEL_SEARCH_MATCHED = 1, +}; + +int camel_filter_search_match (CamelMimeMessage *message, CamelMessageInfo *info, + const char *source, const char *expression, CamelException *ex); #ifdef __cplusplus } diff --git a/camel/camel.c b/camel/camel.c index 4a7c8fd7bf..854fe1e896 100644 --- a/camel/camel.c +++ b/camel/camel.c @@ -27,6 +27,8 @@ #include #endif +#include + #ifdef HAVE_NSS #include #include -- cgit v1.2.3