X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=attach.c;h=7bc9c436b9f3e122e37c411b75d79a04250ff32d;hp=2b9fb0f6762bd4bd957735622a61770cabc5ad96;hb=0ff1c0b36260c231b7d63ffc88646505e0ea11de;hpb=24b852b7ee31a675952de8c42643d2448086bbba 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);