From: Antonio Radici Date: Tue, 4 Mar 2014 15:40:45 +0100 Subject: multiple-fcc A patch that allows multiple FCC separated by commas, written by Omen Wild. Original website: http://www.mandarb.com/mutt/ Bug asking for the inclusion: #586454 Gbp-Pq: Topic mutt-patched --- protos.h | 1 + send.c | 2 +- sendlib.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/protos.h b/protos.h index 799ac9b..5d2fafb 100644 --- a/protos.h +++ b/protos.h @@ -364,6 +364,7 @@ int mutt_user_is_recipient (HEADER *); void mutt_update_num_postponed (void); int mutt_wait_filter (pid_t); int mutt_which_case (const char *); +int mutt_write_multiple_fcc (const char *path, HEADER *hdr, const char *msgid, int, char *); int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int, char *); int mutt_write_mime_body (BODY *, FILE *); int mutt_write_mime_header (BODY *, FILE *); diff --git a/send.c b/send.c index 6dd26c0..0b45171 100644 --- a/send.c +++ b/send.c @@ -1810,7 +1810,7 @@ full_fcc: * message was first postponed. */ msg->received = time (NULL); - if (mutt_write_fcc (fcc, msg, NULL, 0, NULL) == -1) + if (mutt_write_multiple_fcc (fcc, msg, NULL, 0, NULL) == -1) { /* * Error writing FCC, we should abort sending. diff --git a/sendlib.c b/sendlib.c index 689a112..2144156 100644 --- a/sendlib.c +++ b/sendlib.c @@ -2687,6 +2687,36 @@ static void set_noconv_flags (BODY *b, short flag) } } +/* Handle a Fcc with multiple, comma separated entries. */ +int mutt_write_multiple_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc) { + char fcc_tok[_POSIX_PATH_MAX]; + char fcc_expanded[_POSIX_PATH_MAX]; + char *tok = NULL; + int status; + + strfcpy(fcc_tok, path, _POSIX_PATH_MAX); + + tok = strtok(fcc_tok, ","); + dprint(1, (debugfile, "Fcc: initial mailbox = '%s'\n", tok)); + /* mutt_expand_path already called above for the first token */ + if((status = mutt_write_fcc (tok, hdr, NULL, 0, NULL)) != 0) + return status; + + while((tok = strtok(NULL, ",")) != NULL) { + if(*tok) { + /* Only call mutt_expand_path iff tok has some data */ + dprint(1, (debugfile, "Fcc: additional mailbox token = '%s'\n", tok)); + strfcpy(fcc_expanded, tok, sizeof(fcc_expanded)); + mutt_expand_path(fcc_expanded, sizeof(fcc_expanded)); + dprint(1, (debugfile, " Additional mailbox expanded = '%s'\n", fcc_expanded)); + if((status = mutt_write_fcc (fcc_expanded, hdr, NULL, 0, NULL)) != 0) + return status; + } + } + + return 0; +} + int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc) { CONTEXT f;