Use m_tempfile instead of mktemp in attach/recvattach
authorJulien Danjou <julien@danjou.info>
Wed, 13 Dec 2006 17:36:01 +0000 (18:36 +0100)
committerPierre Habouzit <madcoder@debian.org>
Wed, 13 Dec 2006 19:00:37 +0000 (20:00 +0100)
This means we open temporary file before calling mutt_pipe_attach()

Signed-off-by: Julien Danjou <julien@danjou.info>
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
attach.c
attach.h
recvattach.c

index d4aa0d3..f917c1f 100644 (file)
--- a/attach.c
+++ b/attach.c
@@ -571,18 +571,11 @@ return_error:
 
 /* returns 1 on success, 0 on error */
 int mutt_pipe_attachment (FILE * fp, BODY * b, const char *path,
-                          char *outfile)
+                          int out)
 {
   pid_t thepid;
-  int out = -1;
   int rv = 0;
 
-  if (outfile && *outfile)
-    if ((out = safe_open (outfile, O_CREAT | O_EXCL | O_WRONLY)) < 0) {
-      mutt_perror ("open");
-      return 0;
-    }
-
   mutt_endwin (NULL);
 
   if (fp) {
@@ -590,7 +583,7 @@ int mutt_pipe_attachment (FILE * fp, BODY * b, const char *path,
     STATE s;
     p_clear(&s, 1);
 
-    if (outfile && *outfile)
+    if (out)
       thepid = mutt_create_filter_fd(path, &s.fpout, NULL, NULL, -1, out, -1);
     else
       thepid = mutt_create_filter(path, &s.fpout, NULL, NULL);
@@ -612,14 +605,10 @@ int mutt_pipe_attachment (FILE * fp, BODY * b, const char *path,
 
     if ((ifp = fopen (b->filename, "r")) == NULL) {
       mutt_perror ("fopen");
-      if (outfile && *outfile) {
-        close (out);
-        unlink (outfile);
-      }
       return 0;
     }
 
-    if (outfile && *outfile)
+    if (out)
       thepid = mutt_create_filter_fd (path, &ofp, NULL, NULL, -1, out, -1);
     else
       thepid = mutt_create_filter (path, &ofp, NULL, NULL);
@@ -640,7 +629,7 @@ int mutt_pipe_attachment (FILE * fp, BODY * b, const char *path,
 
 bail:
 
-  if (outfile && *outfile)
+  if (out)
     close (out);
 
   /*
@@ -924,7 +913,7 @@ int mutt_print_attachment (FILE * fp, BODY * a)
 
   tok = mime_which_token(type, -1);
   if (tok == MIME_TEXT_PLAIN || tok == MIME_APPLICATION_POSTSCRIPT) {
-    return (mutt_pipe_attachment (fp, a, NONULL (PrintCmd), NULL));
+    return (mutt_pipe_attachment (fp, a, NONULL (PrintCmd), 0));
   }
 
   if (mutt_can_decode (a)) {
index 75fcc19..9d55056 100644 (file)
--- a/attach.h
+++ b/attach.h
@@ -28,7 +28,7 @@ void mutt_attach_reply (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int);
 int mutt_print_attachment (FILE *, BODY *);
 int mutt_decode_save_attachment (FILE *, BODY *, int, int);
 int mutt_save_attachment (FILE *, BODY *, char *, int, HEADER *);
-int mutt_pipe_attachment (FILE *, BODY *, const char *, char *);
+int mutt_pipe_attachment (FILE *, BODY *, const char *, int);
 int mutt_view_attachment (FILE *, BODY *, int, HEADER *, ATTACHPTR **, short);
 int mutt_is_autoview (BODY *, const char *);
 void mutt_check_lookup_list (BODY *, char *, int);
index 6c7956a..94ef9ab 100644 (file)
@@ -490,6 +490,7 @@ mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int afilter)
 {
   char tfile[_POSIX_PATH_MAX];
   char warning[STRING + _POSIX_PATH_MAX];
+  int tempfd;
 
   if (afilter) {
     snprintf (warning, sizeof (warning),
@@ -499,20 +500,18 @@ mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int afilter)
       CLEARLINE (LINES - 1);
       return;
     }
-    mutt_mktemp (tfile);
-  } else {
-    tfile[0] = '\0';
+    tempfd = m_tempfd(tfile, sizeof(tfile), NONULL(Tempdir), NULL);
   }
 
-  if (mutt_pipe_attachment (fp, body, command, tfile)) {
+  if (mutt_pipe_attachment (fp, body, command, tempfd)) {
     if (afilter) {
       mutt_unlink (body->filename);
       mutt_rename_file (tfile, body->filename);
       mutt_update_encoding (body);
       mutt_message _("Attachment filtered.");
     }
-  } else {
-    if (afilter && tfile[0])
+  } else if (afilter) {
+      close(tempfd);
       mutt_unlink (tfile);
   }
 }