X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=sendlib.c;h=d55cd55580eca7c6a14cbbfc815b74677ed5e679;hp=619591ae6596cd17f27e15eea7ca206c595b1570;hb=ef7b80006ebb47372d69c64e8b2b2f0764333d55;hpb=89af1bcd125ce7dfd30acf684a4fdc98c44e36bc diff --git a/sendlib.c b/sendlib.c index 619591a..d55cd55 100644 --- a/sendlib.c +++ b/sendlib.c @@ -604,7 +604,7 @@ static size_t convert_file_to (FILE * file, const char *fromcode, #ifdef HAVE_ICONV iconv_t cd1, *cd; char bufi[256], bufu[512], bufo[4 * sizeof (bufi)]; - ICONV_CONST char *ib, *ub; + const char *ib, *ub; char *ob; size_t ibl, obl, ubl, ubl1, n, ret; int i; @@ -639,7 +639,7 @@ static size_t convert_file_to (FILE * file, const char *fromcode, /* Convert to UTF-8 */ ib = bufi; ob = bufu, obl = sizeof (bufu); - n = iconv (cd1, ibl ? &ib : 0, &ibl, &ob, &obl); + n = my_iconv(cd1, ibl ? &ib : 0, &ibl, &ob, &obl); assert (n == (size_t) (-1) || !n || ICONV_NONTRANS); if (n == (size_t) (-1) && ((errno != EINVAL && errno != E2BIG) || ib == bufi)) { @@ -655,7 +655,7 @@ static size_t convert_file_to (FILE * file, const char *fromcode, if (cd[i] != (iconv_t) (-1) && score[i] != (size_t) (-1)) { ub = bufu, ubl = ubl1; ob = bufo, obl = sizeof (bufo); - n = iconv (cd[i], (ibl || ubl) ? &ub : 0, &ubl, &ob, &obl); + n = my_iconv(cd[i], (ibl || ubl) ? &ub : 0, &ubl, &ob, &obl); if (n == (size_t) (-1)) { assert (errno == E2BIG || (BUGGY_ICONV && (errno == EILSEQ || errno == ENOENT))); @@ -892,7 +892,7 @@ int mutt_lookup_mime_type (BODY * att, const char *path) szf = str_len (path); - for (count = 0; count < 3; count++) { + for (count = 0; count < 4; count++) { /* * can't use strtok() because we use it in an inner loop below, so use * a switch statement here instead. @@ -907,6 +907,9 @@ int mutt_lookup_mime_type (BODY * att, const char *path) case 2: strfcpy (buf, PKGDATADIR "/mime.types", sizeof (buf)); break; + case 3: + strfcpy (buf, SYSCONFDIR "/mime.types", sizeof (buf)); + break; default: debug_print (1, ("Internal error, count = %d.\n", count)); goto bye; /* shouldn't happen */ @@ -1004,7 +1007,7 @@ void mutt_message_to_7bit (BODY * a, FILE * fp) goto cleanup; } - fseek (fpin, a->offset, 0); + fseeko (fpin, a->offset, 0); a->parts = mutt_parse_messageRFC822 (fpin, a); transform_to_7bit (a->parts, fpin); @@ -1012,7 +1015,7 @@ void mutt_message_to_7bit (BODY * a, FILE * fp) mutt_copy_hdr (fpin, fpout, a->offset, a->offset + a->length, CH_MIME | CH_NONEWLINE | CH_XMIT, NULL); - fputs ("Mime-Version: 1.0\n", fpout); + fputs ("MIME-Version: 1.0\n", fpout); mutt_write_mime_header (a->parts, fpout); fputc ('\n', fpout); mutt_write_mime_body (a->parts, fpout); @@ -1471,6 +1474,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, char *p; LIST *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)) @@ -1478,6 +1482,8 @@ 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 */ @@ -1495,7 +1501,8 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - fputs ("To: \n", fp); + if (EDIT_HEADER("To:")) + fputs ("To:\n", fp); if (env->cc) { fputs ("Cc: ", fp); @@ -1505,7 +1512,8 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - fputs ("Cc: \n", fp); + if (EDIT_HEADER("Cc:")) + fputs ("Cc:\n", fp); if (env->bcc) { if (mode != 0 || option (OPTWRITEBCC)) { @@ -1517,29 +1525,31 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, #ifdef USE_NNTP if (!option (OPTNEWSSEND)) #endif - fputs ("Bcc: \n", fp); + if (EDIT_HEADER("Bcc:")) + fputs ("Bcc:\n", fp); #ifdef USE_NNTP if (env->newsgroups) fprintf (fp, "Newsgroups: %s\n", env->newsgroups); - else if (mode == 1 && option (OPTNEWSSEND)) - fputs ("Newsgroups: \n", fp); + else if (mode == 1 && option (OPTNEWSSEND) && EDIT_HEADER("Newsgroups:")) + fputs ("Newsgroups:\n", fp); if (env->followup_to) fprintf (fp, "Followup-To: %s\n", env->followup_to); - else if (mode == 1 && option (OPTNEWSSEND)) - fputs ("Followup-To: \n", fp); + else if (mode == 1 && option (OPTNEWSSEND) && EDIT_HEADER("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)) - fputs ("X-Comment-To: \n", fp); + else if (mode == 1 && option (OPTNEWSSEND) && option (OPTXCOMMENTTO) && + EDIT_HEADER("X-Comment-To:")) + fputs ("X-Comment-To:\n", fp); #endif if (env->subject) fprintf (fp, "Subject: %s\n", env->subject); - else if (mode == 1) - fputs ("Subject: \n", fp); + else if (mode == 1 && EDIT_HEADER("Subject:")) + fputs ("Subject:\n", fp); /* save message id if the user has set it */ if (env->message_id && !privacy) @@ -1549,8 +1559,8 @@ 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) - fputs ("Reply-To: \n", fp); + else if (mode > 0 && EDIT_HEADER("Reply-To:")) + fputs ("Reply-To:\n", fp); if (env->mail_followup_to) #ifdef USE_NNTP @@ -1569,7 +1579,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach, } /* Add the MIME headers */ - fputs ("Mime-Version: 1.0\n", fp); + fputs ("MIME-Version: 1.0\n", fp); mutt_write_mime_header (attach, fp); } @@ -1579,6 +1589,8 @@ 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, ':'))) { @@ -1618,6 +1630,8 @@ 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*) _mem_free); + return (ferror (fp) == 0 ? 0 : -1); } @@ -1950,13 +1964,14 @@ static char **add_args (char **args, size_t * argslen, size_t * argsmax, return (args); } -static char **add_option (char **args, size_t * argslen, size_t * argsmax, - char *s) +static char **add_option(char **args, size_t * argslen, size_t * argsmax, + const char *s) { - if (*argslen == *argsmax) - mem_realloc (&args, (*argsmax += 5) * sizeof (char *)); - args[(*argslen)++] = s; - return (args); + if (*argslen == *argsmax) { + mem_realloc(&args, (*argsmax += 5) * sizeof (char *)); + } + args[(*argslen)++] = s; + return (args); } static int mutt_invoke_sendmail (ADDRESS * from, /* the sender */ @@ -2014,9 +2029,16 @@ static int mutt_invoke_sendmail (ADDRESS * from, /* the sender */ if (eightbit && option (OPTUSE8BITMIME)) args = add_option (args, &argslen, &argsmax, "-B8BITMIME"); - if (option (OPTENVFROM) && from && !from->next) { - args = add_option (args, &argslen, &argsmax, "-f"); - args = add_args (args, &argslen, &argsmax, from); + if (option (OPTENVFROM)) { + ADDRESS *f = NULL; + if (EnvFrom) + f = EnvFrom; + else if (from && !from->next) + f = from; + if (f) { + args = add_option (args, &argslen, &argsmax, "-f"); + args = add_args (args, &argslen, &argsmax, f); + } } if (DsnNotify) { args = add_option (args, &argslen, &argsmax, "-N"); @@ -2236,7 +2258,7 @@ static int _mutt_bounce_message (FILE * fp, HEADER * h, ADDRESS * to, if (!option (OPTBOUNCEDELIVERED)) ch_flags |= CH_WEED_DELIVERED; - fseek (fp, h->offset, 0); + fseeko (fp, h->offset, 0); fprintf (f, "Resent-From: %s", resent_from); fprintf (f, "\nResent-%s", mutt_make_date (date, sizeof (date))); if (MsgIdFormat && *MsgIdFormat) @@ -2461,9 +2483,9 @@ int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid, * this will happen, and it can cause problems parsing the mailbox * later. */ - fseek (tempfp, -1, 2); + fseeko (tempfp, -1, 2); if (fgetc (tempfp) != '\n') { - fseek (tempfp, 0, 2); + fseeko (tempfp, 0, 2); fputc ('\n', tempfp); } @@ -2482,7 +2504,7 @@ int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid, rewind (tempfp); while (fgets (sasha, sizeof (sasha), tempfp) != NULL) lines++; - fprintf (msg->fp, "Content-Length: %ld\n", (long) ftell (tempfp)); + fprintf (msg->fp, "Content-Length: %zd\n", ftello (tempfp)); fprintf (msg->fp, "Lines: %d\n\n", lines); /* copy the body and clean up */