From ad7fa17cb2ae8d89ab5f407c58eb9cf7e52613ee Mon Sep 17 00:00:00 2001 From: Richard Russon Date: Tue, 6 Aug 2019 15:46:50 +0100 Subject: [PATCH] address: add mutt_addr_to_intl() --- address/address.c | 27 +++++++++++++++++++++++++++ address/address.h | 1 + 2 files changed, 28 insertions(+) diff --git a/address/address.c b/address/address.c index d522106f0..473e00d9c 100644 --- a/address/address.c +++ b/address/address.c @@ -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 diff --git a/address/address.h b/address/address.h index 3fdd947d3..61c6d7b72 100644 --- a/address/address.h +++ b/address/address.h @@ -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); -- 2.40.0