[PATCH 1/2] Fix <get-attachment> to use $tmpdraftdir.

"Kevin J. McCarthy" <[email protected]>
Newsgroups gmane.mail.mutt.devel
Message-ID <[email protected]>
I missed converting it before because it was hidden inside a shared
function, mutt_rfc1524_expand_filename().  Most of those callers use
the file for an actual $tmpdir file, but <get-attachment> should put
it in the compose $tmpdraftdir like other attachments.

Create two separate functions, mutt_rfc1524_expand_tmpdir_filename()
and mutt_rfc1524_expand_tmpdraftdir_filename().  Change
mutt_get_tmp_attachment() to call the latter.
---
 attach.c  | 18 +++++++++---------
 handler.c |  2 +-
 rfc1524.c | 26 +++++++++++++++++++++++---
 rfc1524.h |  3 ++-
 4 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/attach.c b/attach.c
index 74cc99e7..59fe1a26 100644
--- a/attach.c
+++ b/attach.c
@@ -59,7 +59,8 @@ int mutt_get_tmp_attachment(BODY *a)
 
   snprintf(type, sizeof(type), "%s/%s", TYPE(a), a->subtype);
   rfc1524_mailcap_lookup(a, type, sizeof(type), entry, 0);
-  mutt_rfc1524_expand_filename(entry->nametemplate, a->filename, tempfile);
+  /* <get-attachment> in the compose menu should save the file inside $tmpdraftdir */
+  mutt_rfc1524_expand_tmpdraftdir_filename(entry->nametemplate, a->filename, tempfile);
 
   rfc1524_free_entry(&entry);
 
@@ -112,8 +113,8 @@ int mutt_compose_attachment(BODY *a)
       else
         mutt_buffer_strcpy(command, entry->composecommand);
 
-      mutt_rfc1524_expand_filename(entry->nametemplate,
-                                   a->filename, newfile);
+      mutt_rfc1524_expand_tmpdir_filename(entry->nametemplate, a->filename,
+                                          newfile);
       muttdbg(1, "oldfile: %s\t newfile: %s", a->filename, mutt_b2s(newfile));
 
       if (safe_symlink(a->filename, mutt_b2s(newfile)) == -1)
@@ -244,8 +245,8 @@ int mutt_edit_attachment(BODY *a)
     {
 
       mutt_buffer_strcpy(command, entry->editcommand);
-      mutt_rfc1524_expand_filename(entry->nametemplate,
-                                   a->filename, newfile);
+      mutt_rfc1524_expand_tmpdir_filename(entry->nametemplate, a->filename,
+                                          newfile);
       muttdbg(1, "oldfile: %s\t newfile: %s", a->filename, mutt_b2s(newfile));
 
       if (safe_symlink(a->filename, mutt_b2s(newfile)) == -1)
@@ -403,8 +404,7 @@ int mutt_view_attachment(FILE *fp, BODY *a, int flag, HEADER *hdr,
     mutt_sanitize_filename(fname,
                            (fp ? 0 : MUTT_SANITIZE_ALLOW_SLASH) |
                            MUTT_SANITIZE_ALLOW_8BIT);
-    mutt_rfc1524_expand_filename(entry->nametemplate, fname,
-                                 tempfile);
+    mutt_rfc1524_expand_tmpdir_filename(entry->nametemplate, fname, tempfile);
     FREE(&fname);
 
     if (mutt_save_attachment(fp, a, mutt_b2s(tempfile), 0, NULL, 0) == -1)
@@ -978,8 +978,8 @@ int mutt_print_attachment(FILE *fp, BODY *a)
     mutt_sanitize_filename(sanitized_fname,
                            (fp ? 0 : MUTT_SANITIZE_ALLOW_SLASH) |
                            MUTT_SANITIZE_ALLOW_8BIT);
-    mutt_rfc1524_expand_filename(entry->nametemplate, sanitized_fname,
-                                 newfile);
+    mutt_rfc1524_expand_tmpdir_filename(entry->nametemplate, sanitized_fname,
+                                        newfile);
     FREE(&sanitized_fname);
 
     if (mutt_save_attachment(fp, a, mutt_b2s(newfile), 0, NULL, 0) == -1)
diff --git a/handler.c b/handler.c
index 8a7bbbb7..ddba01f2 100644
--- a/handler.c
+++ b/handler.c
@@ -1329,7 +1329,7 @@ static int autoview_handler(BODY *a, STATE *s)
 
   fname = safe_strdup(a->filename);
   mutt_sanitize_filename(fname, MUTT_SANITIZE_ALLOW_8BIT);
-  mutt_rfc1524_expand_filename(entry->nametemplate, fname, tempfile);
+  mutt_rfc1524_expand_tmpdir_filename(entry->nametemplate, fname, tempfile);
   FREE(&fname);
 
   if (entry->command)
diff --git a/rfc1524.c b/rfc1524.c
index f1b13fc9..b14436c1 100644
--- a/rfc1524.c
+++ b/rfc1524.c
@@ -494,9 +494,9 @@ int rfc1524_mailcap_lookup(BODY *a, char *type, size_t typelen, rfc1524_entry *e
  * template and/or the old file name will be used for the
  * comparison and the temporary file name.
  */
-void mutt_rfc1524_expand_filename(const char *nametemplate,
-                                  const char *oldfile,
-                                  BUFFER *newfile)
+static void _rfc1524_expand_filename(const char *nametemplate,
+                                     const char *oldfile,
+                                     BUFFER *newfile)
 {
   int i, j, k, ps;
   const char *s;
@@ -600,10 +600,30 @@ void mutt_rfc1524_expand_filename(const char *nametemplate,
       mutt_buffer_strcpy(newfile, nametemplate);
     }
   }
+}
 
+/* This routine will create a _temporary_ filename, matching the
+ * name template if given, in $tmpdir.
+ */
+void mutt_rfc1524_expand_tmpdir_filename(const char *nametemplate,
+                                         const char *oldfile,
+                                         BUFFER *newfile)
+{
+  _rfc1524_expand_filename(nametemplate, oldfile, newfile);
   mutt_adv_mktemp(newfile);
 }
 
+/* This routine will create a _temporary_ filename, matching the
+ * name template if given, in $tmpdraftdir.
+ */
+void mutt_rfc1524_expand_tmpdraftdir_filename(const char *nametemplate,
+                                              const char *oldfile,
+                                              BUFFER *newfile)
+{
+  _rfc1524_expand_filename(nametemplate, oldfile, newfile);
+  mutt_adv_mktemp_draft(newfile);
+}
+
 /* If rfc1524_expand_command() is used on a recv'd message, then
  * the filename doesn't exist yet, but if its used while sending a message,
  * then we need to rename the existing file.
diff --git a/rfc1524.h b/rfc1524.h
index e74feb37..4d7b14e5 100644
--- a/rfc1524.h
+++ b/rfc1524.h
@@ -37,7 +37,8 @@ typedef struct rfc1524_mailcap_entry {
 rfc1524_entry *rfc1524_new_entry(void);
 void rfc1524_free_entry(rfc1524_entry **);
 int mutt_rfc1524_expand_command(BODY *, const char *, const char *, BUFFER *);
-void mutt_rfc1524_expand_filename(const char *, const char *, BUFFER *);
+void mutt_rfc1524_expand_tmpdir_filename(const char *, const char *, BUFFER *);
+void mutt_rfc1524_expand_tmpdraftdir_filename(const char *, const char *, BUFFER *);
 int rfc1524_mailcap_lookup(BODY *, char *, size_t, rfc1524_entry *, int);
 int mutt_rename_file(const char *, const char *);
 
-- 
2.55.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.