X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=sendlib.c;h=6f40ea15b0c42fd0f04032beff8ad49061aa7f27;hp=2c5611a629cc251d7dd534065299c4402bd6fc59;hb=284454918cc95058b026d057195eaa5279135c36;hpb=10b7c16c8905d1b7ceaeeb6cfab9ad2ec03d8780 diff --git a/sendlib.c b/sendlib.c index 2c5611a..6f40ea1 100644 --- a/sendlib.c +++ b/sendlib.c @@ -9,34 +9,18 @@ #define _SENDLIB_C 1 -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include -#include -#include -#include -#include - #include #include - #include - #include +#include + #include "mutt.h" #include "handler.h" #include "recvattach.h" @@ -44,7 +28,6 @@ #include "copy.h" #include "pager.h" #include "charset.h" -#include #include "mutt_idna.h" #ifdef USE_LIBESMTP @@ -1366,6 +1349,24 @@ void mutt_write_references (string_list_t * r, FILE * f) p_delete(&ref); } +static int edit_header(int mode, const char *s) +{ + const char *p; + int slen = m_strlen(s); + + if (mode != 1 || option(OPTXMAILTO)) + return 1; + + p = skipspaces(EditorHeaders); + while (*p) { + if (!ascii_strncasecmp(p, s, slen) && p[slen - 1] == ':') + return 1; + p = skipspaces(p + slen); + } + + return 0; +} + /* Note: all RFC2047 encoding should be done outside of this routine, except * for the "real name." This will allow this routine to be used more than * once, if necessary. @@ -1389,7 +1390,6 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, char *p; string_list_t *tmp = env->userhdrs; int has_agent = 0; /* user defined user-agent header field exists */ - list2_t* hdrs = list_from_str (EditorHeaders, " "); #ifdef USE_NNTP if (!option (OPTNEWSSEND)) @@ -1397,8 +1397,6 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, if (mode == 0 && !privacy) fputs (mutt_make_date (buffer, sizeof (buffer)), fp); -#define EDIT_HEADER(x) (mode != 1 || option(OPTXMAILTO) || (mode == 1 && list_lookup(hdrs,(list_lookup_t*) ascii_strcasecmp,x) >= 0)) - /* OPTUSEFROM is not consulted here so that we can still write a From: * field if the user sets it with the `my_hdr' command */ @@ -1416,7 +1414,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - if (EDIT_HEADER("To:")) + if (edit_header(mode, "To:")) fputs ("To:\n", fp); if (env->cc) { @@ -1427,7 +1425,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - if (EDIT_HEADER("Cc:")) + if (edit_header(mode, "Cc:")) fputs ("Cc:\n", fp); if (env->bcc) { @@ -1440,30 +1438,30 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - if (EDIT_HEADER("Bcc:")) + if (edit_header(mode, "Bcc:")) fputs ("Bcc:\n", fp); #ifdef USE_NNTP if (env->newsgroups) fprintf (fp, "Newsgroups: %s\n", env->newsgroups); - else if (mode == 1 && option (OPTNEWSSEND) && EDIT_HEADER("Newsgroups:")) + else if (mode == 1 && option (OPTNEWSSEND) && edit_header(mode, "Newsgroups:")) fputs ("Newsgroups:\n", fp); if (env->followup_to) fprintf (fp, "Followup-To: %s\n", env->followup_to); - else if (mode == 1 && option (OPTNEWSSEND) && EDIT_HEADER("Followup-To:")) + else if (mode == 1 && option (OPTNEWSSEND) && edit_header(mode, "Followup-To:")) fputs ("Followup-To:\n", fp); if (env->x_comment_to) fprintf (fp, "X-Comment-To: %s\n", env->x_comment_to); else if (mode == 1 && option (OPTNEWSSEND) && option (OPTXCOMMENTTO) && - EDIT_HEADER("X-Comment-To:")) + edit_header(mode, "X-Comment-To:")) fputs ("X-Comment-To:\n", fp); #endif if (env->subject) fprintf (fp, "Subject: %s\n", env->subject); - else if (mode == 1 && EDIT_HEADER("Subject:")) + else if (mode == 1 && edit_header(mode, "Subject:")) fputs ("Subject:\n", fp); /* save message id if the user has set it */ @@ -1474,7 +1472,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, fputs ("Reply-To: ", fp); mutt_write_address_list (env->reply_to, fp, 10, 0); } - else if (mode > 0 && EDIT_HEADER("Reply-To:")) + else if (mode > 0 && edit_header(mode, "Reply-To:")) fputs ("Reply-To:\n", fp); if (env->mail_followup_to) @@ -1504,8 +1502,6 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, fputc ('\n', fp); } -#undef EDIT_HEADER - /* Add any user defined headers */ for (; tmp; tmp = tmp->next) { if ((p = strchr (tmp->data, ':'))) { @@ -1538,8 +1534,6 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, fprintf (fp, "User-Agent: %s (%s)\n", mutt_make_version (0), os); } - list_del (&hdrs, (list_del_t*)xmemfree); - return (ferror (fp) == 0 ? 0 : -1); } @@ -1687,7 +1681,7 @@ static void mutt_gen_localpart(char *buf, unsigned int len, const char *fmt) #undef APPEND_FMT } -char *mutt_gen_msgid (void) +static char *mutt_gen_msgid (void) { char buf[SHORT_STRING]; char localpart[SHORT_STRING]; @@ -1750,17 +1744,8 @@ send_msg(const char *path, const char **args, const char *msg, char **tempfile) setsid (); /* next we close all open files */ -#if defined(OPEN_MAX) - for (fd = 0; fd < OPEN_MAX; fd++) - close (fd); -#elif defined(_POSIX_OPEN_MAX) - for (fd = 0; fd < _POSIX_OPEN_MAX; fd++) + for (fd = 0; fd < getdtablesize(); fd++) close (fd); -#else - close (0); - close (1); - close (2); -#endif /* now the second fork() */ if ((pid = fork ()) == 0) { @@ -2163,41 +2148,6 @@ int mutt_bounce_message (FILE * fp, HEADER * h, address_t * to) return ret; } - -/* given a list of addresses, return a list of unique addresses */ -address_t *mutt_remove_duplicates (address_t * addr) -{ - address_t *top = addr; - address_t **last = ⊤ - address_t *tmp; - int dodup = 0; - - while (addr) { - for (tmp = top; tmp && tmp != addr; tmp = tmp->next) { - if (tmp->mailbox && addr->mailbox && - !ascii_strcasecmp (addr->mailbox, tmp->mailbox)) { - dodup = 1; - break; - } - } - - if (dodup) { - *last = addr->next; - - addr->next = NULL; - address_list_wipe(&addr); - - addr = *last; - } - else { - last = &addr->next; - addr = addr->next; - } - } - - return (top); -} - static void set_noconv_flags (BODY * b, short flag) { for (; b; b = b->next) {