+void address_wipe(address_t *addr)
+{
+ p_delete(&addr->personal);
+ p_delete(&addr->mailbox);
+ address_delete(&addr->next);
+}
+
+
+void rfc822_qualify(address_t *addr, const char *host)
+{
+ char *p;
+
+ for (; addr; addr = addr->next) {
+ if (!addr->group && addr->mailbox && strchr(addr->mailbox, '@') == NULL) {
+ p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2);
+ sprintf(p, "%s@%s", addr->mailbox, host); /* __SPRINTF_CHECKED__ */
+ p_delete(&addr->mailbox);
+ addr->mailbox = p;
+ }
+ }
+}
+
+address_t *address_dup(address_t *addr)
+{
+ address_t *res = address_new();
+
+ res->personal = m_strdup(addr->personal);
+ res->mailbox = m_strdup(addr->mailbox);
+ res->group = addr->group;
+ return res;
+}
+
+address_t *address_list_dup(address_t *addr)
+{
+ address_t *res = NULL, **resp = &res;
+
+ for (; addr; addr = addr->next) {
+ *resp = address_dup(addr);
+ resp = &(*resp)->next;
+ }
+
+ return res;
+}