--- mutt-1.3.25/PATCHES.orig Wed Jan 16 15:11:38 2002 +++ mutt-1.3.25/PATCHES Wed Jan 16 15:11:38 2002 @@ -0,0 +1 @@ +Feature patch: reverse-reply 1.3.25 by Stefan `Sec` Zehl --- mutt-1.3.25/protos.h.orig Fri Dec 28 18:11:49 2001 +++ mutt-1.3.25/protos.h Wed Jan 16 15:11:12 2002 @@ -82,6 +82,7 @@ ADDRESS *mutt_get_address (ENVELOPE *, char **); ADDRESS *mutt_lookup_alias (const char *s); ADDRESS *mutt_remove_duplicates (ADDRESS *); +ADDRESS *mutt_reverse_address (ADDRESS *); ADDRESS *mutt_expand_aliases (ADDRESS *); ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *); --- mutt-1.3.25/send.c.orig Fri Dec 28 18:14:36 2001 +++ mutt-1.3.25/send.c Wed Jan 16 15:12:14 2002 @@ -574,6 +574,10 @@ /* the CC field can get cluttered, especially with lists */ env->to = mutt_remove_duplicates (env->to); env->cc = mutt_remove_duplicates (env->cc); + if (option (OPTREVALIAS)){ + env->to = mutt_reverse_address (env->to); + env->cc = mutt_reverse_address (env->cc); + } env->cc = mutt_remove_xrefs (env->to, env->cc); } --- mutt-1.3.25/sendlib.c.orig Mon Dec 3 11:17:57 2001 +++ mutt-1.3.25/sendlib.c Wed Jan 16 15:11:12 2002 @@ -2292,6 +2292,37 @@ } } +/* given a list of addresses, return a list of reverse_alias'ed addresses */ +ADDRESS *mutt_reverse_address (ADDRESS *addr) +{ + ADDRESS *top,*tmp,*ptr,*ali; + + if ((top=addr)==NULL) + return NULL; + + if ((ali = alias_reverse_lookup (top)) && ali->personal){ + tmp=rfc822_cpy_adr_real(ali); + tmp->next=top->next; + top->next=NULL; + rfc822_free_address(&top); + top=tmp; + } + + ptr=top; + while (top->next != NULL){ + tmp=top->next; + if ((ali = alias_reverse_lookup (tmp)) && ali->personal){ + top->next=rfc822_cpy_adr_real(ali); + top->next->next=tmp->next; + tmp->next=NULL; + rfc822_free_address(&tmp); + tmp=top->next; + } + top=tmp; + } + return ptr; +} + int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc) { CONTEXT f;