X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=send.c;h=2143f19804b06c7d343a227c59a7a4e9e72d90bb;hp=82579d51aa58ffc1adca6608c96c36c4099c9745;hb=cc707c1e986b60f2c1c1932d0789038d465a7a59;hpb=f2ff91d8b7627e22af9715d384b6f9e9e802a39e diff --git a/send.c b/send.c index 82579d5..2143f19 100644 --- a/send.c +++ b/send.c @@ -285,66 +285,85 @@ static char *nntp_get_header(const char *s) static void process_user_recips (ENVELOPE * env) { - string_list_t *uh = UserHeader; + string_list_t *uh = UserHeader; - for (; uh; uh = uh->next) { - if (ascii_strncasecmp ("to:", uh->data, 3) == 0) - env->to = rfc822_parse_adrlist (env->to, uh->data + 3); - else if (ascii_strncasecmp ("cc:", uh->data, 3) == 0) - env->cc = rfc822_parse_adrlist (env->cc, uh->data + 3); - else if (ascii_strncasecmp ("bcc:", uh->data, 4) == 0) - env->bcc = rfc822_parse_adrlist (env->bcc, uh->data + 4); + for (; uh; uh = uh->next) { + const char *p = strchr(uh->data, ':'); + if (!p) + continue; + + switch (mime_which_token(uh->data, p++ - uh->data)) { + case MIME_TO: + env->to = rfc822_parse_adrlist(env->to, p); + break; + case MIME_CC: + env->cc = rfc822_parse_adrlist(env->cc, p); + break; + case MIME_BCC: + env->bcc = rfc822_parse_adrlist(env->bcc, p); + break; #ifdef USE_NNTP - else if (ascii_strncasecmp ("newsgroups:", uh->data, 11) == 0) - env->newsgroups = nntp_get_header (uh->data + 11); - else if (ascii_strncasecmp ("followup-to:", uh->data, 12) == 0) - env->followup_to = nntp_get_header (uh->data + 12); - else if (ascii_strncasecmp ("x-comment-to:", uh->data, 13) == 0) - env->x_comment_to = nntp_get_header (uh->data + 13); + case MIME_NEWSGROUPS: + env->newsgroups = nntp_get_header(p); + break; + case MIME_FOLLOWUP_TO: + env->followup_to = nntp_get_header(p); + break; + case MIME_X_COMMENT_TO: + env->x_comment_to = nntp_get_header(p); + break; #endif - } + default: break; + } + } } -static void process_user_header (ENVELOPE * env) +static void process_user_header(ENVELOPE * env) { - string_list_t *uh = UserHeader; - string_list_t *last = env->userhdrs; - - if (last) - while (last->next) - last = last->next; - - for (; uh; uh = uh->next) { - if (ascii_strncasecmp ("from:", uh->data, 5) == 0) { - /* User has specified a default From: address. Remove default address */ - address_list_wipe(&env->from); - env->from = rfc822_parse_adrlist (env->from, uh->data + 5); - } - else if (ascii_strncasecmp ("reply-to:", uh->data, 9) == 0) { - address_list_wipe(&env->reply_to); - env->reply_to = rfc822_parse_adrlist (env->reply_to, uh->data + 9); - } - else if (ascii_strncasecmp ("message-id:", uh->data, 11) == 0) - m_strreplace(&env->message_id, uh->data + 11); - else if (ascii_strncasecmp ("to:", uh->data, 3) != 0 && - ascii_strncasecmp ("cc:", uh->data, 3) != 0 && - ascii_strncasecmp ("bcc:", uh->data, 4) != 0 && + string_list_t *uh; + string_list_t **last = string_list_last(&env->userhdrs); + + for (uh = UserHeader; uh; uh = uh->next) { + const char *p = strchr(uh->data, ':'); + if (!p) + continue; + + switch (mime_which_token(uh->data, p++ - uh->data)) { + case MIME_FROM: + /* User has specified a default From: address. Remove default address */ + address_list_wipe(&env->from); + env->from = rfc822_parse_adrlist(env->from, p); + break; + + case MIME_REPLY_TO: + address_list_wipe(&env->reply_to); + env->reply_to = rfc822_parse_adrlist (env->reply_to, p); + break; + + case MIME_MESSAGE_ID: + m_strreplace(&env->message_id, p); + break; + + case MIME_TO: + case MIME_CC: + case MIME_BCC: #ifdef USE_NNTP - ascii_strncasecmp ("newsgroups:", uh->data, 11) != 0 && - ascii_strncasecmp ("followup-to:", uh->data, 12) != 0 && - ascii_strncasecmp ("x-comment-to:", uh->data, 13) != 0 && + case MIME_NEWSGROUPS: + case MIME_FOLLOWUP_TO: + case MIME_X_COMMENT_TO: #endif - ascii_strncasecmp ("supersedes:", uh->data, 11) != 0 && - ascii_strncasecmp ("subject:", uh->data, 8) != 0) { - if (last) { - last->next = string_item_new(); - last = last->next; - } - else - last = env->userhdrs = string_item_new(); - last->data = m_strdup(uh->data); + case MIME_SUPERSEDES: + case MIME_SUPERCEDES: + case MIME_SUBJECT: + break; + + default: + *last = string_item_new(); + (*last)->data = m_strdup(uh->data); + last = &(*last)->next; + break; + } } - } } void mutt_forward_intro (FILE * fp, HEADER * cur) @@ -910,7 +929,7 @@ void mutt_set_followup_to (ENVELOPE * e) from field */ static address_t *set_reverse_name (ENVELOPE * env) { - address_t *tmp; + address_t *tmp = NULL; for (tmp = env->to; tmp; tmp = tmp->next) { if (mutt_addr_is_user(tmp)) @@ -924,6 +943,8 @@ static address_t *set_reverse_name (ENVELOPE * env) if (!mutt_addr_is_user(env->from)) return NULL; + tmp = env->from; + found: tmp = address_dup(tmp); if (!option(OPTREVREAL) || !tmp->personal) { @@ -1270,7 +1291,7 @@ int ci_send_message (int flags, /* send mode */ process_user_header (msg->env); - if (option (OPTSIGONTOP) && (!(flags & SENDKEY) && Editor)) + if (option (OPTSIGONTOP) && (!(flags & SENDKEY))) append_signature (tempfp); /* include replies/forwarded messages, unless we are given a template */ @@ -1278,7 +1299,7 @@ int ci_send_message (int flags, /* send mode */ && generate_body (tempfp, msg, flags, ctx, cur) == -1) goto cleanup; - if (!option (OPTSIGONTOP) && (!(flags & SENDKEY) && Editor)) + if (!option (OPTSIGONTOP) && (!(flags & SENDKEY))) append_signature (tempfp); /* @@ -1384,12 +1405,11 @@ int ci_send_message (int flags, /* send mode */ goto cleanup; } else if (option (OPTEDITHDRS)) { mutt_env_to_local (msg->env); - mutt_edit_headers (Editor, msg->content->filename, msg, fcc, - sizeof (fcc)); + mutt_edit_headers(msg->content->filename, msg, fcc, sizeof (fcc)); mutt_env_to_idna (msg->env, NULL, NULL); } else { - mutt_edit_file (Editor, msg->content->filename); + mutt_edit_file(msg->content->filename); if (stat (msg->content->filename, &st) == 0) { if (mtime != st.st_mtime)