]> granicus.if.org Git - neomutt/commitdiff
address: add mutt_addr_to_intl()
authorRichard Russon <rich@flatcap.org>
Tue, 6 Aug 2019 14:46:50 +0000 (15:46 +0100)
committerRichard Russon <rich@flatcap.org>
Mon, 19 Aug 2019 23:14:27 +0000 (00:14 +0100)
address/address.c
address/address.h

index d522106f01aeb1e10429f32ccb60d9aebf755053..473e00d9c081f7ae2a4932569b6aeabf7a68de6f 100644 (file)
@@ -1176,6 +1176,33 @@ size_t mutt_addrlist_write(char *buf, size_t buflen, const struct AddressList *a
   return pbuf - buf;
 }
 
+/**
+ * mutt_addr_to_intl - Convert an Address to Punycode
+ * @param a Address to convert
+ * @retval bool True on success, false otherwise
+ */
+bool mutt_addr_to_intl(struct Address *a)
+{
+  if (!a || !a->mailbox || addr_is_intl(a))
+    return true;
+
+  char *user = NULL;
+  char *domain = NULL;
+  if (addr_mbox_to_udomain(a->mailbox, &user, &domain) == -1)
+    return true;
+
+  char *intl_mailbox = mutt_idna_local_to_intl(user, domain);
+
+  FREE(&user);
+  FREE(&domain);
+
+  if (!intl_mailbox)
+    return false;
+
+  addr_set_intl(a, intl_mailbox);
+  return true;
+}
+
 /**
  * mutt_addrlist_to_intl - Convert an Address list to Punycode
  * @param[in]  al  Address list to modify
index 3fdd947d3862e3454182fa4df5fa5201a97a3c4e..61c6d7b724c715660e0415e97ca1609f7adf7388 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_intl    (struct Address *a);
 bool            mutt_addr_to_local   (struct Address *a);
 size_t          mutt_addr_write      (char *buf, size_t buflen, struct Address *addr, bool display);