From a9d22903ab440da5d0b4d994d9de49ff2cf663d4 Mon Sep 17 00:00:00 2001 From: pdmef Date: Tue, 26 Jul 2005 20:15:56 +0000 Subject: [PATCH] Rocco Rutte: - move some totally misplaced comparison functions (temporarily) over to muttlib.c where they don't belong either git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@351 e385b8ad-14ed-0310-8656-cc95a2468c6d --- mbox.c | 112 +----------------------------------------------------- mbox.h | 1 - mh.c | 2 +- muttlib.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ protos.h | 7 ++++ 5 files changed, 117 insertions(+), 113 deletions(-) diff --git a/mbox.c b/mbox.c index 4f426a4..d3ecea5 100644 --- a/mbox.c +++ b/mbox.c @@ -417,116 +417,6 @@ static int mbox_open_mailbox (CONTEXT * ctx) return (rc); } -/* return 1 if address lists are strictly identical */ -static int strict_addrcmp (const ADDRESS * a, const ADDRESS * b) -{ - while (a && b) { - if (mutt_strcmp (a->mailbox, b->mailbox) || - mutt_strcmp (a->personal, b->personal)) - return (0); - - a = a->next; - b = b->next; - } - if (a || b) - return (0); - - return (1); -} - -static int strict_cmp_lists (const LIST * a, const LIST * b) -{ - while (a && b) { - if (mutt_strcmp (a->data, b->data)) - return (0); - - a = a->next; - b = b->next; - } - if (a || b) - return (0); - - return (1); -} - -static int strict_cmp_envelopes (const ENVELOPE * e1, const ENVELOPE * e2) -{ - if (e1 && e2) { - if (mutt_strcmp (e1->message_id, e2->message_id) || - mutt_strcmp (e1->subject, e2->subject) || - !strict_cmp_lists (e1->references, e2->references) || - !strict_addrcmp (e1->from, e2->from) || - !strict_addrcmp (e1->sender, e2->sender) || - !strict_addrcmp (e1->reply_to, e2->reply_to) || - !strict_addrcmp (e1->to, e2->to) || - !strict_addrcmp (e1->cc, e2->cc) || - !strict_addrcmp (e1->return_path, e2->return_path)) - return (0); - else - return (1); - } - else { - if (e1 == NULL && e2 == NULL) - return (1); - else - return (0); - } -} - -static int strict_cmp_parameters (const PARAMETER * p1, const PARAMETER * p2) -{ - while (p1 && p2) { - if (mutt_strcmp (p1->attribute, p2->attribute) || - mutt_strcmp (p1->value, p2->value)) - return (0); - - p1 = p1->next; - p2 = p2->next; - } - if (p1 || p2) - return (0); - - return (1); -} - -static int strict_cmp_bodies (const BODY * b1, const BODY * b2) -{ - if (b1->type != b2->type || - b1->encoding != b2->encoding || - mutt_strcmp (b1->subtype, b2->subtype) || - mutt_strcmp (b1->description, b2->description) || - !strict_cmp_parameters (b1->parameter, b2->parameter) || - b1->length != b2->length) - return (0); - return (1); -} - -/* return 1 if headers are strictly identical */ -int mbox_strict_cmp_headers (const HEADER * h1, const HEADER * h2) -{ - if (h1 && h2) { - if (h1->received != h2->received || - h1->date_sent != h2->date_sent || - h1->content->length != h2->content->length || - h1->lines != h2->lines || - h1->zhours != h2->zhours || - h1->zminutes != h2->zminutes || - h1->zoccident != h2->zoccident || - h1->mime != h2->mime || - !strict_cmp_envelopes (h1->env, h2->env) || - !strict_cmp_bodies (h1->content, h2->content)) - return (0); - else - return (1); - } - else { - if (h1 == NULL && h2 == NULL) - return (1); - else - return (0); - } -} - /* check to see if the mailbox has changed on disk. * * return values: @@ -1077,7 +967,7 @@ static int mbox_reopen_mailbox (CONTEXT * ctx, int *index_hint) rc = -1; } else { - cmp_headers = mbox_strict_cmp_headers; + cmp_headers = mutt_cmp_header; if (ctx->magic == M_MBOX) rc = mbox_parse_mailbox (ctx); else diff --git a/mbox.h b/mbox.h index 8c26e82..4959a28 100644 --- a/mbox.h +++ b/mbox.h @@ -28,7 +28,6 @@ int mbox_lock_mailbox (CONTEXT *, int, int); void mbox_unlock_mailbox (CONTEXT *); int mbox_check_empty (const char*); int mbox_is_magic (const char*, struct stat*); -int mbox_strict_cmp_headers (const HEADER *, const HEADER *); mx_t* mbox_reg_mx (void); mx_t* mmdf_reg_mx (void); diff --git a/mh.c b/mh.c index 4ddb155..5c0d664 100644 --- a/mh.c +++ b/mh.c @@ -1748,7 +1748,7 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) ctx->hdrs[i]->active = 0; if ((p = hash_find (fnames, ctx->hdrs[i]->path)) && p->h && - (mbox_strict_cmp_headers (ctx->hdrs[i], p->h))) { + (mutt_cmp_header (ctx->hdrs[i], p->h))) { ctx->hdrs[i]->active = 1; /* found the right message */ if (!ctx->hdrs[i]->changed) diff --git a/muttlib.c b/muttlib.c index 7c01770..72566aa 100644 --- a/muttlib.c +++ b/muttlib.c @@ -1534,3 +1534,111 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x) return 0; } + +int mutt_cmp_header (const HEADER * h1, const HEADER * h2) { + if (h1 && h2) { + if (h1->received != h2->received || + h1->date_sent != h2->date_sent || + h1->content->length != h2->content->length || + h1->lines != h2->lines || + h1->zhours != h2->zhours || + h1->zminutes != h2->zminutes || + h1->zoccident != h2->zoccident || + h1->mime != h2->mime || + !mutt_cmp_env (h1->env, h2->env) || + !mutt_cmp_body (h1->content, h2->content)) + return (0); + else + return (1); + } + else { + if (h1 == NULL && h2 == NULL) + return (1); + else + return (0); + } +} + +/* return 1 if address lists are strictly identical */ +int mutt_cmp_addr (const ADDRESS * a, const ADDRESS * b) +{ + while (a && b) { + if (mutt_strcmp (a->mailbox, b->mailbox) || + mutt_strcmp (a->personal, b->personal)) + return (0); + + a = a->next; + b = b->next; + } + if (a || b) + return (0); + + return (1); +} + +int mutt_cmp_list (const LIST * a, const LIST * b) +{ + while (a && b) { + if (mutt_strcmp (a->data, b->data)) + return (0); + + a = a->next; + b = b->next; + } + if (a || b) + return (0); + + return (1); +} + +int mutt_cmp_env (const ENVELOPE * e1, const ENVELOPE * e2) +{ + if (e1 && e2) { + if (mutt_strcmp (e1->message_id, e2->message_id) || + mutt_strcmp (e1->subject, e2->subject) || + !mutt_cmp_list (e1->references, e2->references) || + !mutt_cmp_addr (e1->from, e2->from) || + !mutt_cmp_addr (e1->sender, e2->sender) || + !mutt_cmp_addr (e1->reply_to, e2->reply_to) || + !mutt_cmp_addr (e1->to, e2->to) || + !mutt_cmp_addr (e1->cc, e2->cc) || + !mutt_cmp_addr (e1->return_path, e2->return_path)) + return (0); + else + return (1); + } + else { + if (e1 == NULL && e2 == NULL) + return (1); + else + return (0); + } +} + +int mutt_cmp_param (const PARAMETER * p1, const PARAMETER * p2) +{ + while (p1 && p2) { + if (mutt_strcmp (p1->attribute, p2->attribute) || + mutt_strcmp (p1->value, p2->value)) + return (0); + + p1 = p1->next; + p2 = p2->next; + } + if (p1 || p2) + return (0); + + return (1); +} + +int mutt_cmp_body (const BODY * b1, const BODY * b2) +{ + if (b1->type != b2->type || + b1->encoding != b2->encoding || + mutt_strcmp (b1->subtype, b2->subtype) || + mutt_strcmp (b1->description, b2->description) || + !mutt_cmp_param (b1->parameter, b2->parameter) || + b1->length != b2->length) + return (0); + return (1); +} diff --git a/protos.h b/protos.h index e06e44f..69fecdd 100644 --- a/protos.h +++ b/protos.h @@ -99,6 +99,13 @@ LIST *mutt_parse_references (char *, int); ENVELOPE *mutt_read_rfc822_header (FILE *, HEADER *, short, short); HEADER *mutt_dup_header (HEADER *); +int mutt_cmp_header (const HEADER*, const HEADER*); +int mutt_cmp_addr (const ADDRESS * a, const ADDRESS * b); +int mutt_cmp_list (const LIST * a, const LIST * b); +int mutt_cmp_env (const ENVELOPE * e1, const ENVELOPE * e2); +int mutt_cmp_param (const PARAMETER * p1, const PARAMETER * p2); +int mutt_cmp_body (const BODY * b1, const BODY * b2); + #if USE_HCACHE void *mutt_hcache_open (const char *path, const char *folder); void mutt_hcache_close (void *db); -- 2.20.1