From: Julien Danjou Date: Wed, 13 Dec 2006 17:36:01 +0000 (+0100) Subject: Use m_tempfile instead of mktemp in attach/recvattach X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=1a79031e2cd056f6f7d95dfaccc58323251521ba Use m_tempfile instead of mktemp in attach/recvattach This means we open temporary file before calling mutt_pipe_attach() Signed-off-by: Julien Danjou Signed-off-by: Pierre Habouzit --- diff --git a/attach.c b/attach.c index d4aa0d3..f917c1f 100644 --- 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)) { diff --git a/attach.h b/attach.h index 75fcc19..9d55056 100644 --- 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); diff --git a/recvattach.c b/recvattach.c index 6c7956a..94ef9ab 100644 --- a/recvattach.c +++ b/recvattach.c @@ -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); } }