mutt_*mktemp--
[apps/madmutt.git] / attach.c
index 118edfa..54bfc73 100644 (file)
--- a/attach.c
+++ b/attach.c
@@ -56,10 +56,8 @@ int mutt_get_tmp_attachment (BODY * a)
   else
     mutt_perror(fpin ? tempfile : a->filename);
 
-  if (fpin)
-    fclose (fpin);
-  if (fpout)
-    fclose (fpout);
+  m_fclose(&fpin);
+  m_fclose(&fpout);
 
   return a->unlink ? 0 : -1;
 }
@@ -111,7 +109,6 @@ int mutt_compose_attachment (BODY * a)
         if (r != -1 && entry->composetypecommand) {
           BODY *b;
           FILE *fp, *tfp;
-          char tempfile[_POSIX_PATH_MAX];
 
           if ((fp = safe_fopen (a->filename, "r")) == NULL) {
             mutt_perror (_("Failure to open file to parse headers."));
@@ -121,6 +118,8 @@ int mutt_compose_attachment (BODY * a)
 
           b = mutt_read_mime_header (fp, 0);
           if (b) {
+            char tempfile[_POSIX_PATH_MAX];
+
             if (b->parameter) {
               parameter_list_wipe(&a->parameter);
               a->parameter = b->parameter;
@@ -140,15 +139,14 @@ int mutt_compose_attachment (BODY * a)
             /* Remove headers by copying out data to another file, then 
              * copying the file back */
             fseeko (fp, b->offset, 0);
-            mutt_mktemp (tempfile);
-            if ((tfp = safe_fopen (tempfile, "w")) == NULL) {
+            tfp = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL);
+            if (!tfp) {
               mutt_perror (_("Failure to open file to strip headers."));
-
               goto bailout;
             }
             mutt_copy_stream (fp, tfp);
-            fclose (fp);
-            fclose (tfp);
+            m_fclose(&fp);
+            m_fclose(&tfp);
             mutt_unlink (a->filename);
             if (mutt_rename_file (tempfile, a->filename) != 0) {
               mutt_perror (_("Failure to rename file."));
@@ -375,6 +373,7 @@ int mutt_view_attachment (FILE * fp, BODY * a, int flag, HEADER * hdr,
   rfc1524_entry *entry = NULL;
   int rc = -1;
   int unlink_tempfile = 0;
+  int pagerfd = -1;
 
   is_message = mutt_is_message_type (a->type, a->subtype);
   if (is_message && a->hdr && (a->hdr->security & ENCRYPT) &&
@@ -449,23 +448,21 @@ int mutt_view_attachment (FILE * fp, BODY * a, int flag, HEADER * hdr,
     if (fp && !use_mailcap && a->filename) {
       /* recv case */
       m_strcpy(pagerfile, sizeof(pagerfile), a->filename);
-      mutt_adv_mktemp (NULL, pagerfile, sizeof (pagerfile));
+      pagerfd = m_tempfd(pagerfile, sizeof(pagerfile), NONULL(Tempdir), pagerfile);
+    } else {
+      pagerfd = m_tempfd(pagerfile, sizeof(pagerfile), NONULL(Tempdir), NULL);
     }
-    else
-      mutt_mktemp (pagerfile);
   }
 
   if (use_mailcap) {
     pid_t thepid = 0;
-    int tempfd = -1, pagerfd = -1;
+    int tempfd = -1;
 
     if (!use_pager)
       mutt_endwin (NULL);
 
     if (use_pager || use_pipe) {
-      if (use_pager
-          && ((pagerfd = safe_open (pagerfile, O_CREAT | O_EXCL | O_WRONLY))
-              == -1)) {
+      if (use_pager && pagerfd == -1) {
         mutt_perror ("open");
         goto return_error;
       }
@@ -614,7 +611,7 @@ int mutt_pipe_attachment (FILE * fp, BODY * b, const char *path,
 
     s.fpin = fp;
     mutt_decode_attachment (b, &s);
-    safe_fclose (&s.fpout);
+    m_fclose(&s.fpout);
   }
   else {
     /* send case */
@@ -638,13 +635,13 @@ int mutt_pipe_attachment (FILE * fp, BODY * b, const char *path,
     if (thepid < 0) {
       mutt_perror (_("Can't create filter"));
 
-      safe_fclose (&ifp);
+      m_fclose(&ifp);
       goto bail;
     }
 
     mutt_copy_stream (ifp, ofp);
-    safe_fclose (&ofp);
-    safe_fclose (&ifp);
+    m_fclose(&ofp);
+    m_fclose(&ifp);
   }
 
   rv = 1;
@@ -742,13 +739,12 @@ int mutt_save_attachment (FILE * fp, BODY * m, char *path, int flags,
       fseeko ((s.fpin = fp), m->offset, 0);
       mutt_decode_attachment (m, &s);
 
-      if (fclose (s.fpout) != 0) {
+      if (m_fclose(&s.fpout) != 0) {
         mutt_perror ("fclose");
         return (-1);
       }
     }
-  }
-  else {
+  } else {
     /* In send mode, just copy file */
 
     FILE *ofp, *nfp;
@@ -760,19 +756,19 @@ int mutt_save_attachment (FILE * fp, BODY * m, char *path, int flags,
 
     if ((nfp = mutt_save_attachment_open (path, flags)) == NULL) {
       mutt_perror ("fopen");
-      safe_fclose (&ofp);
+      m_fclose(&ofp);
       return (-1);
     }
 
     if (mutt_copy_stream (ofp, nfp) == -1) {
       mutt_error _("Write fault!");
 
-      safe_fclose (&ofp);
-      safe_fclose (&nfp);
+      m_fclose(&ofp);
+      m_fclose(&nfp);
       return (-1);
     }
-    safe_fclose (&ofp);
-    safe_fclose (&nfp);
+    m_fclose(&ofp);
+    m_fclose(&nfp);
   }
 
   return 0;
@@ -809,7 +805,7 @@ int mutt_decode_save_attachment (FILE * fp, BODY * m, char *path,
 
     if (stat (m->filename, &st) == -1) {
       mutt_perror ("stat");
-      fclose (s.fpout);
+      m_fclose(&s.fpout);
       return (-1);
     }
 
@@ -838,7 +834,7 @@ int mutt_decode_save_attachment (FILE * fp, BODY * m, char *path,
 
   mutt_body_handler (m, &s);
 
-  fclose (s.fpout);
+  m_fclose(&s.fpout);
   if (fp == NULL) {
     m->length = 0;
     m->encoding = saved_encoding;
@@ -847,7 +843,7 @@ int mutt_decode_save_attachment (FILE * fp, BODY * m, char *path,
       m->parts = saved_parts;
       m->hdr = saved_hdr;
     }
-    fclose (s.fpin);
+    m_fclose(&s.fpin);
   }
 
   return (0);
@@ -915,12 +911,12 @@ int mutt_print_attachment (FILE * fp, BODY * a)
         mutt_perror (_("Can't create filter"));
 
         rfc1524_entry_delete(&entry);
-        safe_fclose (&ifp);
+        m_fclose(&ifp);
         return 0;
       }
       mutt_copy_stream (ifp, fpout);
-      safe_fclose (&fpout);
-      safe_fclose (&ifp);
+      m_fclose(&fpout);
+      m_fclose(&ifp);
       if (mutt_wait_filter (thepid) || option (OPTWAITKEY))
         mutt_any_key_to_continue (NULL);
     }
@@ -968,16 +964,16 @@ int mutt_print_attachment (FILE * fp, BODY * a)
 
       mutt_copy_stream (ifp, fpout);
 
-      safe_fclose (&fpout);
-      safe_fclose (&ifp);
+      m_fclose(&fpout);
+      m_fclose(&ifp);
 
       if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
         mutt_any_key_to_continue (NULL);
       rc = 1;
     }
   bail0:
-    safe_fclose (&ifp);
-    safe_fclose (&fpout);
+    m_fclose(&ifp);
+    m_fclose(&fpout);
     mutt_unlink (newfile);
     return rc;
   }
@@ -1010,7 +1006,7 @@ int mutt_attach_check (HEADER* hdr) {
       p++;
     }
   }
-  fclose (fp);
+  m_fclose(&fp);
 
   return (found);
 }