]> granicus.if.org Git - neomutt/commitdiff
Cleanup Address API: parse and free
authorPietro Cerutti <gahr@gahr.ch>
Thu, 16 May 2019 11:57:25 +0000 (11:57 +0000)
committerRichard Russon <rich@flatcap.org>
Thu, 23 May 2019 10:57:10 +0000 (11:57 +0100)
address/address.c
address/address.h
sendlib.c
test/Makefile.autosetup
test/address/mutt_addresslist_parse.c [moved from test/address/mutt_addr_parse_list.c with 88% similarity]
test/address/mutt_addresslist_parse2.c [moved from test/address/mutt_addr_parse_list2.c with 63% similarity]
test/main.c

index 8a1a03445f67913d295ae7e6789fa53dc08baeb1..d9b3e12d4f539473a97a016e0b7dba97798e33fd 100644 (file)
@@ -65,21 +65,6 @@ const char *const AddressErrors[] = {
   "bad route in <>", "bad address in <>",      "bad address spec",
 };
 
-/**
- * free_address - Free a single Address
- * @param[out] a Address to free
- *
- * @note This doesn't alter the links if the Address is in a list.
- */
-static void free_address(struct Address **a)
-{
-  if (!a || !*a)
-    return;
-  FREE(&(*a)->personal);
-  FREE(&(*a)->mailbox);
-  FREE(a);
-}
-
 /**
  * parse_comment - Extract a comment (parenthesised string)
  * @param[in]  s          String, just after the opening parenthesis
@@ -381,7 +366,7 @@ static void add_addrspec(struct AddressList *al, const char *phrase,
 
   if (!parse_addr_spec(phrase, comment, commentlen, commentmax, cur))
   {
-    free_address(&cur);
+    mutt_addr_free(&cur);
     return;
   }
 
@@ -392,7 +377,7 @@ static void add_addrspec(struct AddressList *al, const char *phrase,
  * mutt_addr_new - Create a new Address
  * @retval ptr Newly allocated Address
  *
- * Free the result with free_address() or mutt_addr_free()
+ * Free the result with mutt_addr_free()
  */
 struct Address *mutt_addr_new(void)
 {
@@ -429,16 +414,16 @@ int mutt_addr_remove_from_list(struct AddressList *al, const char *mailbox)
 }
 
 /**
- * mutt_addr_free - Free a list of Addresses
- * @param[out] p Top of the list
+ * mutt_addr_free - Free a single Addresses
+ * @param[out] a Address to free
  */
-void mutt_addr_free(struct Address **p)
+void mutt_addr_free(struct Address **a)
 {
-  if (!p)
+  if (!a || !*a)
     return;
-
-  struct AddressList *al = mutt_addr_to_addresslist(*p);
-  mutt_addresslist_free(&al);
+  FREE(&(*a)->personal);
+  FREE(&(*a)->mailbox);
+  FREE(a);
 }
 
 /**
@@ -565,7 +550,7 @@ int mutt_addresslist_parse(struct AddressList *al, const char *s)
         if (!s)
         {
           mutt_addresslist_free_all(al);
-          free_address(&a);
+          mutt_addr_free(&a);
           return 0;
         }
         mutt_addresslist_append(al, a);
@@ -611,10 +596,10 @@ int mutt_addresslist_parse(struct AddressList *al, const char *s)
 }
 
 /**
- * mutt_addr_parse_list2 - Parse a list of email addresses
- * @param p Add to this List of Addresses
+ * mutt_addresslist_parse - Parse a list of email addresses
+ * @param al Add to this List of Addresses
  * @param s String to parse
- * @retval ptr Head of the list of addresses
+ * @retval int Number of parsed addresses
  *
  * The email addresses can be separated by whitespace or commas.
  */
@@ -645,18 +630,6 @@ int mutt_addresslist_parse2(struct AddressList *al, const char *s)
   return parsed;
 }
 
-struct Address *mutt_addr_parse_list2(struct Address *p, const char *s)
-{
-  if (!s)
-    return NULL;
-
-  struct AddressList *al = mutt_addr_to_addresslist(p);
-  mutt_addresslist_parse2(al, s);
-  p = mutt_addresslist_to_addr(al);
-  FREE(&al);
-  return p;
-}
-
 /**
  * mutt_addr_qualify - Expand local names in an Address list using a hostname
  * @param addr Address list
@@ -1497,7 +1470,7 @@ struct Address *mutt_addresslist_to_addr(struct AddressList *al)
 void mutt_addresslist_free_one(struct AddressList *al, struct AddressNode *an)
 {
   TAILQ_REMOVE(al, an, entries);
-  free_address(&an->addr);
+  mutt_addr_free(&an->addr);
   FREE(&an);
 }
 
@@ -1515,7 +1488,7 @@ void mutt_addresslist_free_all(struct AddressList *al)
   while (np)
   {
     next = TAILQ_NEXT(np, entries);
-    free_address(&np->addr);
+    mutt_addr_free(&np->addr);
     FREE(&np);
     np = next;
   }
index e8d39482de93e78f350dc151c5789e817b94b343..b2927634a09beb30fa6c8736737c1f152082265b 100644 (file)
@@ -68,17 +68,14 @@ extern const char AddressSpecials[];
 
 void            mutt_addr_cat(char *buf, size_t buflen, const char *value, const char *specials);
 bool            mutt_addr_cmp(const struct Address *a, const struct Address *b);
-
-
-
 struct Address *mutt_addr_copy(const struct Address *addr);
 const char *    mutt_addr_for_display(const struct Address *a);
-void            mutt_addr_free(struct Address **p);
+void            mutt_addr_free(struct Address **a);
+
 bool            mutt_addr_is_intl(const struct Address *a);
 bool            mutt_addr_is_local(const struct Address *a);
 int             mutt_addr_mbox_to_udomain(const char *mbox, char **user, char **domain);
 struct Address *mutt_addr_new(void);
-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 AddressList *a, const char *mailbox);
 void            mutt_addr_remove_xrefs(const struct AddressList *a, struct AddressList *b);
index 94a99ca587faffe6c04ad4d1722e4da84ecfe4d7..f3316c0a6cfc520d27605d1a87e7da7ff2200138 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -3064,7 +3064,7 @@ int mutt_bounce_message(FILE *fp, struct Email *e, struct AddressList *to)
   {
     mutt_error(_("Bad IDN %s while preparing resent-from"), err);
     FREE(&err);
-    mutt_addr_free(&from);
+    mutt_addresslist_free_all(&from_list);
     return -1;
   }
   mutt_addresslist_write(resent_from, sizeof(resent_from), &from_list, false);
@@ -3081,7 +3081,7 @@ int mutt_bounce_message(FILE *fp, struct Email *e, struct AddressList *to)
   rfc2047_encode_addrlist(&resent_to, "Resent-To");
   int rc = bounce_message(fp, e, &resent_to, resent_from, &from_list);
   mutt_addresslist_free_all(&resent_to);
-  mutt_addr_free(&from);
+  mutt_addresslist_free_all(&from_list);
 
   return rc;
 }
index ebfe34989e6c17ff201617baf94ea6218b9ce5c7..296f68593f1d4620e574ac66fce884584f9a24ed 100644 (file)
@@ -9,13 +9,13 @@ ADDRESS_OBJS  = test/address/mutt_addr_append.o \
                  test/address/mutt_addr_is_intl.o \
                  test/address/mutt_addr_is_local.o \
                  test/address/mutt_addresslist_equal.o \
+                 test/address/mutt_addresslist_parse2.o \
+                 test/address/mutt_addresslist_parse.o \
                  test/address/mutt_addrlist_dedupe.o \
                  test/address/mutt_addrlist_to_intl.o \
                  test/address/mutt_addrlist_to_local.o \
                  test/address/mutt_addr_mbox_to_udomain.o \
                  test/address/mutt_addr_new.o \
-                 test/address/mutt_addr_parse_list2.o \
-                 test/address/mutt_addr_parse_list.o \
                  test/address/mutt_addr_qualify.o \
                  test/address/mutt_addr_remove_from_list.o \
                  test/address/mutt_addr_remove_xrefs.o \
similarity index 88%
rename from test/address/mutt_addr_parse_list.c
rename to test/address/mutt_addresslist_parse.c
index 052eb9159e734a10caa05ab0201e9b4069adb663..dc8f08105e921f4f1ada73a865cd3b1b48d5c5f3 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * @file
- * Test code for mutt_addr_parse_list()
+ * Test code for mutt_addresslist_parse()
  *
  * @authors
  * Copyright (C) 2019 Richard Russon <rich@flatcap.org>
@@ -26,9 +26,9 @@
 #include "mutt/mutt.h"
 #include "address/lib.h"
 
-void test_mutt_addr_parse_list(void)
+void test_mutt_addresslist_parse(void)
 {
-  // struct Address *mutt_addr_parse_list(struct Address *top, const char *s);
+  // void mutt_addresslist_parse(struct AddressList *top, const char *s);
 
   {
     struct AddressList alist = TAILQ_HEAD_INITIALIZER(alist);
similarity index 63%
rename from test/address/mutt_addr_parse_list2.c
rename to test/address/mutt_addresslist_parse2.c
index 623d1ef8059e3ee5c668e415e05b8252afc64058..735f99d164b31d58e08bcd539781a342bb2eaa3a 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * @file
- * Test code for mutt_addr_parse_list2()
+ * Test code for mutt_addresslist_parse2()
  *
  * @authors
  * Copyright (C) 2019 Richard Russon <rich@flatcap.org>
 #include "mutt/mutt.h"
 #include "address/lib.h"
 
-void test_mutt_addr_parse_list2(void)
+void test_mutt_addresslist_parse2(void)
 {
-  // struct Address *mutt_addr_parse_list2(struct Address *p, const char *s);
-
+  // struct Address *mutt_addresslist_parse2(struct Address *p, const char *s);
   {
-    struct Address *addr = NULL;
-    TEST_CHECK((addr = mutt_addr_parse_list2(NULL, "apple")) != NULL);
-    mutt_addr_free(&addr);
+    struct AddressList alist = TAILQ_HEAD_INITIALIZER(alist);
+    mutt_addresslist_parse(&alist, "apple");
+    TEST_CHECK(mutt_addresslist_first(&alist) != NULL);
+    mutt_addresslist_free_all(&alist);
   }
 
   {
-    struct Address addr = { 0 };
-    TEST_CHECK(!mutt_addr_parse_list2(&addr, NULL));
+    struct AddressList alist = TAILQ_HEAD_INITIALIZER(alist);
+    mutt_addresslist_parse(&alist, NULL);
+    TEST_CHECK(mutt_addresslist_first(&alist) == NULL);
   }
-
+  
   mutt_buffer_pool_free();
 }
index a7a567c9c218c3a6b40b9f3694844b199be31e25..12c75b102ac7824f26791e324062012a05e2dd15 100644 (file)
@@ -38,8 +38,6 @@
   NEOMUTT_TEST_ITEM(test_mutt_addr_is_local)                                   \
   NEOMUTT_TEST_ITEM(test_mutt_addr_mbox_to_udomain)                            \
   NEOMUTT_TEST_ITEM(test_mutt_addr_new)                                        \
-  NEOMUTT_TEST_ITEM(test_mutt_addr_parse_list)                                 \
-  NEOMUTT_TEST_ITEM(test_mutt_addr_parse_list2)                                \
   NEOMUTT_TEST_ITEM(test_mutt_addr_qualify)                                    \
   NEOMUTT_TEST_ITEM(test_mutt_addr_remove_from_list)                           \
   NEOMUTT_TEST_ITEM(test_mutt_addr_remove_xrefs)                               \
@@ -50,6 +48,8 @@
   NEOMUTT_TEST_ITEM(test_mutt_addr_write)                                      \
   NEOMUTT_TEST_ITEM(test_mutt_addr_write_single)                               \
   NEOMUTT_TEST_ITEM(test_mutt_addresslist_equal)                               \
+  NEOMUTT_TEST_ITEM(test_mutt_addresslist_parse)                               \
+  NEOMUTT_TEST_ITEM(test_mutt_addresslist_parse2)                              \
   NEOMUTT_TEST_ITEM(test_mutt_addrlist_to_intl)                                \
   NEOMUTT_TEST_ITEM(test_mutt_addrlist_to_local)                               \
   NEOMUTT_TEST_ITEM(test_mutt_actx_add_attach)                                 \