summarylogtreecommitdiffstats
path: root/multiple-fcc.patch
blob: 25255aa1bbf6955fe524124fdd7024988045619a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
From: Antonio Radici <antonio@debian.org>
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;