]> granicus.if.org Git - neomutt/commitdiff
Add mutt_addr_to_local
authorPietro Cerutti <gahr@gahr.ch>
Wed, 22 May 2019 12:01:41 +0000 (12:01 +0000)
committerRichard Russon <rich@flatcap.org>
Thu, 23 May 2019 10:57:10 +0000 (11:57 +0100)
address/address.c
address/address.h
ncrypt/pgpinvoke.c

index 2a59fad068f373e6b28f4ad412540dcbcc2744e4..d7f1c634d9f3dc3e56f6679699d1a93645ccaa31 100644 (file)
@@ -1225,6 +1225,43 @@ int mutt_addrlist_to_intl(struct AddressList *al, char **err)
   return rc;
 }
 
+/**
+ * mutt_addr_to_local - Convert an Address from Punycode
+ * @param a Address to convert
+ * @param bool True on success, false otherwise
+ */
+bool mutt_addr_to_local(struct Address *a)
+{
+  if (!a->mailbox)
+  {
+    return false;
+  }
+
+  if (addr_is_local(a))
+  {
+    return true;
+  }
+
+  char *user = NULL;
+  char *domain = NULL;
+  if (addr_mbox_to_udomain(a->mailbox, &user, &domain) == -1)
+  {
+    return false;
+  }
+
+  char *local_mailbox = mutt_idna_intl_to_local(user, domain, 0);
+  FREE(&user);
+  FREE(&domain);
+
+  if (!local_mailbox)
+  {
+    return false;
+  }
+
+  addr_set_local(a, local_mailbox);
+  return true;
+}
+
 /**
  * mutt_addrlist_to_local - Convert an Address list from Punycode
  * @param al Address list to modify
@@ -1238,21 +1275,7 @@ int mutt_addrlist_to_local(struct AddressList *al)
   struct Address *a = NULL;
   TAILQ_FOREACH(a, al, entries)
   {
-    if (!a->mailbox || addr_is_local(a))
-      continue;
-
-    char *user = NULL;
-    char *domain = NULL;
-    if (addr_mbox_to_udomain(a->mailbox, &user, &domain) == -1)
-      continue;
-
-    char *local_mailbox = mutt_idna_intl_to_local(user, domain, 0);
-
-    FREE(&user);
-    FREE(&domain);
-
-    if (local_mailbox)
-      addr_set_local(a, local_mailbox);
+    mutt_addr_to_local(a);
   }
   return 0;
 }
index d7fec2a9f91fe9e4c82fd8dd9f2ad8521735ee57..a9bd31f345036e9202e4b561da147b85ba738805 100644 (file)
@@ -72,6 +72,7 @@ struct Address *mutt_addr_create(const char *personal, const char *mailbox);
 const char *    mutt_addr_for_display(const struct Address *a);
 void            mutt_addr_free(struct Address **a);
 struct Address *mutt_addr_new(void);
+bool            mutt_addr_to_local(struct Address *a);
 size_t          mutt_addr_write(char *buf, size_t buflen, struct Address *addr, bool display);
 
 /* Functions that work on struct AddressList */
index 42309f6df8674798414e11fdfb18ee273c41c48f..0779cf8eb99e32c0684748096d646fbac9458cf1 100644 (file)
@@ -444,9 +444,7 @@ void pgp_class_invoke_getkeys(struct Address *addr)
   addr->personal = NULL;
 
   *tmp = '\0';
-  struct AddressList alist = TAILQ_HEAD_INITIALIZER(alist);
-  mutt_addrlist_append(&alist, addr);
-  mutt_addrlist_to_local(&alist);
+  mutt_addr_to_local(addr);
   mutt_addr_write(tmp, sizeof(tmp), addr, false);
   mutt_buffer_quote_filename(buf, tmp, true);