From 1f77fc248643f6c7c7237d482c4395cf81dbbbf3 Mon Sep 17 00:00:00 2001 From: Pietro Cerutti Date: Mon, 13 May 2019 12:12:07 +0000 Subject: [PATCH] Use AddressList in mutt_addr_remove_xrefs --- address/address.c | 42 ++++++++++++++---------------------------- address/address.h | 2 +- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/address/address.c b/address/address.c index e424fed66..cb0215fcb 100644 --- a/address/address.c +++ b/address/address.c @@ -1393,45 +1393,31 @@ struct Address *mutt_addrlist_dedupe(struct Address *addr) * * Remove addresses from "b" which are contained in "a" */ -struct Address *mutt_addr_remove_xrefs(struct Address *a, struct Address *b) +struct Address *mutt_addr_remove_xrefs(const struct Address *a, struct Address *b) { if (!a || !b) return NULL; - struct Address *p = NULL, *prev = NULL; + struct AddressList *ala = mutt_addr_to_addresslist((struct Address *) a); + struct AddressList *alb = mutt_addr_to_addresslist(b); + struct AddressNode *ana, *anb, *tmp; - struct Address *top = b; - while (b) + TAILQ_FOREACH_SAFE(anb, alb, entries, tmp) { - for (p = a; p; p = p->next) - { - if (mutt_addr_cmp(p, b)) - break; - } - if (p) + TAILQ_FOREACH(ana, ala, entries) { - if (prev) - { - prev->next = b->next; - b->next = NULL; - mutt_addr_free(&b); - b = prev; - } - else + if (mutt_addr_cmp(ana->addr, anb->addr)) { - top = top->next; - b->next = NULL; - mutt_addr_free(&b); - b = top; + mutt_addresslist_free_one(alb, anb); + break; } } - else - { - prev = b; - b = b->next; - } } - return top; + + b = mutt_addresslist_to_addr(alb); + FREE(&ala); + FREE(&alb); + return b; } /** diff --git a/address/address.h b/address/address.h index 7bf349496..4801b2292 100644 --- a/address/address.h +++ b/address/address.h @@ -83,7 +83,7 @@ struct Address *mutt_addr_parse_list(struct Address *top, const char *s); struct Address *mutt_addr_parse_list2(struct Address *p, const char *s); void mutt_addr_qualify(struct Address *addr, const char *host); int mutt_addr_remove_from_list(struct Address **a, const char *mailbox); -struct Address *mutt_addr_remove_xrefs(struct Address *a, struct Address *b); +struct Address *mutt_addr_remove_xrefs(const struct Address *a, struct Address *b); bool mutt_addr_search(struct Address *a, struct Address *lst); void mutt_addr_set_intl(struct Address *a, char *intl_mailbox); void mutt_addr_set_local(struct Address *a, char *local_mailbox); -- 2.40.0