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

index 4b9f9df83bc213335499c552c036faa8806402c7..4d22f4fb8c311a17d158251483e7871a67e4b88f 100644 (file)
@@ -449,13 +449,11 @@ void mutt_addr_free(struct Address **p)
   if (!p)
     return;
 
-  struct Address *t = NULL;
-
-  while (*p)
+  struct AddressList *al = mutt_addr_to_addresslist(*p);
+  struct AddressNode *an, *tmp;
+  TAILQ_FOREACH_SAFE(an, al, entries, tmp)
   {
-    t = *p;
-    *p = (*p)->next;
-    free_address(&t);
+    mutt_addresslist_free_one(al, an);
   }
 }
 
@@ -1351,9 +1349,7 @@ struct Address *mutt_addrlist_dedupe(struct Address *addr)
               (mutt_str_strcasecmp(an->addr->mailbox, an2->addr->mailbox) == 0))
           {
             mutt_debug(LL_DEBUG2, "Removing %s\n", an2->addr->mailbox);
-            TAILQ_REMOVE(al, an2, entries);
-            free_address(&an2->addr);
-            FREE(&an2);
+            mutt_addresslist_free_one(al, an2);
           }
         }
       }
@@ -1480,3 +1476,16 @@ struct Address *mutt_addresslist_to_addr(struct AddressList *al)
   }
   return a;
 }
+
+/**
+ * mutt_addresslist_free_one - Unlinks an AddressNode from an AddressList and
+ * frees the referenced Address
+ * @param al AddressList
+ * @param an AddressNode
+ */
+void mutt_addresslist_free_one(struct AddressList *al, struct AddressNode *an)
+{
+  TAILQ_REMOVE(al, an, entries);
+  free_address(&an->addr);
+  FREE(&an);
+}
index d133a731e13b55130a497465019be1440df90652..7bf34949676780a0d55ab14cc98385a227c7c791 100644 (file)
@@ -100,5 +100,6 @@ 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);
+void                mutt_addresslist_free_one(struct AddressList *alist, struct AddressNode *anode);
 
 #endif /* MUTT_EMAIL_ADDRESS_H */