X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=muttlib.c;h=9a781dd73204b829f6989548667c4fb2cd7b77b8;hp=234efd2199e67c4330e21110b7f7967cb99b6f7c;hb=e83ad1be25aefea3ed21ec08edbaf2d5a72c4a9d;hpb=96d53ff49c308769efbf708e1e65819077cb7af6 diff --git a/muttlib.c b/muttlib.c index 234efd2..9a781dd 100644 --- a/muttlib.c +++ b/muttlib.c @@ -637,6 +637,46 @@ void mutt_free_envelope (ENVELOPE ** p) FREE (p); } +/* move all the headers from extra not present in base into base */ +void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra) +{ + /* copies each existing element if necessary, and sets the element + * to NULL in the source so that mutt_free_envelope doesn't leave us + * with dangling pointers. */ +#define MOVE_ELEM(h) if (!base->h) { base->h = (*extra)->h; (*extra)->h = NULL; } + MOVE_ELEM(return_path); + MOVE_ELEM(from); + MOVE_ELEM(to); + MOVE_ELEM(cc); + MOVE_ELEM(bcc); + MOVE_ELEM(sender); + MOVE_ELEM(reply_to); + MOVE_ELEM(mail_followup_to); + MOVE_ELEM(list_post); + MOVE_ELEM(message_id); + MOVE_ELEM(supersedes); + MOVE_ELEM(date); + MOVE_ELEM(x_label); + MOVE_ELEM(references); + MOVE_ELEM(in_reply_to); + /* real_subj is subordinate to subject */ + if (!base->subject) { + base->subject = (*extra)->subject; + base->real_subj = (*extra)->real_subj; + (*extra)->subject = NULL; + (*extra)->real_subj = NULL; + } + /* spam and user headers should never be hashed, and the new envelope may + * have better values. Use new versions regardless. */ + mutt_buffer_free (&base->spam); + mutt_free_list (&base->userhdrs); + MOVE_ELEM(spam); + MOVE_ELEM(userhdrs); +#undef MOVE_ELEM + + mutt_free_envelope(extra); +} + void _mutt_mktemp (char *s, const char *src, int line) {