Use file descriptor instead of path for mutt_decode_save_attachment()
[apps/madmutt.git] / attach.c
index 2b9fb0f..7bc9c43 100644 (file)
--- a/attach.c
+++ b/attach.c
@@ -515,7 +515,7 @@ int mutt_view_attachment (FILE * fp, BODY * a, int flag, HEADER * hdr,
       /* Use built-in handler */
       set_option (OPTVIEWATTACH);       /* disable the "use 'v' to view this part"
                                          * message in case of error */
-      if (mutt_decode_save_attachment (fp, a, pagerfile, M_DISPLAY, 0)) {
+      if (mutt_decode_save_attachment (fp, a, pagerfd, M_DISPLAY)) {
         unset_option (OPTVIEWATTACH);
         goto return_error;
       }
@@ -765,8 +765,8 @@ int mutt_save_attachment (FILE * fp, BODY * m, char *path, int flags,
 }
 
 /* returns 0 on success, -1 on error */
-int mutt_decode_save_attachment (FILE * fp, BODY * m, char *path,
-                                 int displaying, int flags)
+int mutt_decode_save_attachment (FILE * fp, BODY * m, int pathfd,
+                                 int displaying)
 {
   STATE s;
   unsigned int saved_encoding = 0;
@@ -776,10 +776,7 @@ int mutt_decode_save_attachment (FILE * fp, BODY * m, char *path,
   p_clear(&s, 1);
   s.flags = displaying;
 
-  if (flags == M_SAVE_APPEND)
-    s.fpout = fopen (path, "a");
-  else
-    s.fpout = safe_fopen (path, "w");
+  s.fpout = fdopen (pathfd, "w");
 
   if (s.fpout == NULL) {
     mutt_perror ("fopen");
@@ -931,14 +928,15 @@ int mutt_print_attachment (FILE * fp, BODY * a)
     /* decode and print */
 
     int rc = 0;
+    int newfile_fd = 0;
 
     ifp = NULL;
     fpout = NULL;
 
-    mutt_mktemp (newfile);
-    if (mutt_decode_save_attachment (fp, a, newfile, M_PRINTING, 0) == 0) {
+    newfile_fd = m_tempfd(newfile, sizeof(newfile), NONULL(Tempdir), NULL);
+    if (mutt_decode_save_attachment (fp, a, newfile_fd, M_PRINTING) == 0) {
 
-      if ((ifp = fopen (newfile, "r")) == NULL) {
+      if ((ifp = fdopen (newfile_fd, "r")) == NULL) {
         mutt_perror ("fopen");
         goto bail0;
       }
@@ -952,7 +950,7 @@ int mutt_print_attachment (FILE * fp, BODY * a)
       }
 
       mutt_copy_stream (ifp, fpout);
-
+      
       m_fclose(&fpout);
       m_fclose(&ifp);