From: Julien Danjou Date: Wed, 13 Dec 2006 11:42:11 +0000 (+0100) Subject: Use file descriptor instead of path for mutt_decode_save_attachment() X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=0ff1c0b36260c231b7d63ffc88646505e0ea11de Use file descriptor instead of path for mutt_decode_save_attachment() Signed-off-by: Julien Danjou Signed-off-by: Pierre Habouzit --- diff --git a/attach.c b/attach.c index 2b9fb0f..7bc9c43 100644 --- 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); diff --git a/attach.h b/attach.h index c5cdb71..75fcc19 100644 --- a/attach.h +++ b/attach.h @@ -26,7 +26,7 @@ void mutt_attach_forward (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int); void mutt_attach_reply (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int); int mutt_print_attachment (FILE *, BODY *); -int mutt_decode_save_attachment (FILE *, BODY *, char *, int, int); +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_view_attachment (FILE *, BODY *, int, HEADER *, ATTACHPTR **, short); diff --git a/lib-crypt/crypt-gpgme.c b/lib-crypt/crypt-gpgme.c index ec828bb..72dd3ab 100644 --- a/lib-crypt/crypt-gpgme.c +++ b/lib-crypt/crypt-gpgme.c @@ -1614,6 +1614,7 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, char tempfile[_POSIX_PATH_MAX]; char buf[HUGE_STRING]; FILE *tfp; + int tempfd; short sgn = 0; short enc = 0; @@ -1624,13 +1625,13 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, if (tagged_only && !b->tagged) return 0; - mutt_mktemp (tempfile); - if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0) { + tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + if (mutt_decode_save_attachment (fp, b, tempfd, 0) != 0) { unlink (tempfile); return 0; } - if ((tfp = fopen (tempfile, "r")) == NULL) { + if ((tfp = fdopen (tempfd, "r")) == NULL) { unlink (tempfile); return 0; } diff --git a/lib-crypt/pgp.c b/lib-crypt/pgp.c index 08b8509..3dd37d5 100644 --- a/lib-crypt/pgp.c +++ b/lib-crypt/pgp.c @@ -454,6 +454,7 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, char tempfile[_POSIX_PATH_MAX]; char buf[HUGE_STRING]; FILE *tfp; + int tempfd; short sgn = 0; short enc = 0; @@ -465,13 +466,14 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, if (tagged_only && !b->tagged) return 0; - mutt_mktemp (tempfile); - if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0) { + tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + + if (mutt_decode_save_attachment (fp, b, tempfd, 0) != 0) { unlink (tempfile); return 0; } - if ((tfp = fopen (tempfile, "r")) == NULL) { + if ((tfp = fdopen (tempfd, "r")) == NULL) { unlink (tempfile); return 0; } diff --git a/recvattach.c b/recvattach.c index 301b12e..6c7956a 100644 --- a/recvattach.c +++ b/recvattach.c @@ -633,10 +633,10 @@ static void print_attachment_list (FILE * fp, int tag, BODY * top, char newfile[_POSIX_PATH_MAX] = ""; FILE *ifp; + int newfile_fd; - mutt_mktemp (newfile); - if (mutt_decode_save_attachment (fp, top, newfile, M_PRINTING, 0) == - 0) { + newfile_fd = m_tempfd(newfile, sizeof(newfile), NONULL(Tempdir), NULL); + if (mutt_decode_save_attachment (fp, top, newfile_fd, M_PRINTING) == 0) { if ((ifp = fopen (newfile, "r")) != NULL) { mutt_copy_stream (ifp, state->fpout); m_fclose(&ifp);