]> granicus.if.org Git - neomutt/commitdiff
feature: multiple-fcc
authorRichard Russon <rich@flatcap.org>
Thu, 5 May 2016 23:36:57 +0000 (00:36 +0100)
committerRichard Russon <rich@flatcap.org>
Thu, 18 Aug 2016 19:59:08 +0000 (20:59 +0100)
protos.h
send.c
sendlib.c

index 19d640032ae1da433f17215d5b46439a66c7781d..4b80e63b5a007c2a52676e8847a920fa15cd613d 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -368,6 +368,7 @@ void mutt_update_num_postponed (void);
 int mutt_wait_filter (pid_t);
 int mutt_which_case (const char *);
 int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int, char *);
+int mutt_write_multiple_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 *);
 int mutt_write_one_header (FILE *fp, const char *tag, const char *value, const char *pfx, int wraplen, int flags);
diff --git a/send.c b/send.c
index d54d4951d8a3599dec482800d3c32a0540c2052e..dddd6c9c057c69727b2807f06b757040c6e4942f 100644 (file)
--- a/send.c
+++ b/send.c
@@ -1831,7 +1831,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.
index 771eae2d6287488f5b26a5f26faef41325215988..7a88a37ad4aa918ae035b6d433143d539b61df58 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -2690,6 +2690,42 @@ 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, sizeof (fcc_tok));
+
+  tok = strtok(fcc_tok, ",");
+  dprint(1, (debugfile, "Fcc: initial mailbox = '%s'\n", tok));
+  /* mutt_expand_path already called above for the first token */
+  status = mutt_write_fcc (tok, hdr, msgid, post, fcc);
+  if (status != 0)
+    return status;
+
+  while ((tok = strtok (NULL, ",")) != NULL)
+  {
+    if (!*tok)
+      continue;
+
+    /* 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));
+    status = mutt_write_fcc (fcc_expanded, hdr, msgid, post, fcc);
+    if (status != 0)
+      return status;
+  }
+
+  return 0;
+}
+
 int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc)
 {
   CONTEXT f;