]> granicus.if.org Git - neomutt/commitdiff
Use AddressList in mutt_addr_copy_list
authorPietro Cerutti <gahr@gahr.ch>
Mon, 13 May 2019 12:21:09 +0000 (12:21 +0000)
committerRichard Russon <rich@flatcap.org>
Thu, 23 May 2019 10:57:09 +0000 (11:57 +0100)
address/address.c
address/address.h

index 6b789e862fa69816215618e9188fa8ec8d55768e..4b9f9df83bc213335499c552c036faa8806402c7 100644 (file)
@@ -758,26 +758,32 @@ struct Address *mutt_addr_copy(const struct Address *addr)
  */
 struct Address *mutt_addr_copy_list(struct Address *addr, bool prune)
 {
-  struct Address *top = NULL, *last = NULL;
+  struct AddressList *al = mutt_addr_to_addresslist(addr);
+  struct AddressList *al_out = mutt_addresslist_copy(al, prune);
+  struct Address *out = mutt_addresslist_to_addr(al_out);
+  FREE(&al);
+  FREE(&al_out);
+  return out;
+}
 
-  for (; addr; addr = addr->next)
+struct AddressList *mutt_addresslist_copy(const struct AddressList *al, bool prune)
+{
+  struct AddressList *al_out = mutt_addresslist_new();
+  struct AddressNode *an = NULL;
+  TAILQ_FOREACH(an, al, entries)
   {
-    if (prune && addr->group && (!addr->next || !addr->next->mailbox))
+    struct Address *addr = an->addr;
+    struct AddressNode *next = TAILQ_NEXT(an, entries);
+    if (prune && addr->group && (!next || !next->addr->mailbox))
     {
       /* ignore this element of the list */
     }
-    else if (last)
-    {
-      last->next = mutt_addr_copy(addr);
-      last = last->next;
-    }
     else
     {
-      last = mutt_addr_copy(addr);
-      top = last;
+      mutt_addresslist_append(al_out, mutt_addr_copy(addr));
     }
   }
-  return top;
+  return al_out;
 }
 
 /**
index f036c1adc1c984a5f20eb35851f06195cf60a6d1..d133a731e13b55130a497465019be1440df90652 100644 (file)
@@ -98,6 +98,7 @@ struct AddressList *mutt_addr_to_addresslist(struct Address *a);
 struct AddressList *mutt_addresslist_new(void);
 struct Address     *mutt_addresslist_to_addr(struct AddressList *alist);
 void                mutt_addresslist_append(struct AddressList *al, struct Address *a);
+struct AddressList *mutt_addresslist_copy(const struct AddressList *al, bool prune);
 void                mutt_addresslist_free(struct AddressList **alist);
 
 #endif /* MUTT_EMAIL_ADDRESS_H */