/* 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;
}
}
/* 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;
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");
/* 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;
}
}
mutt_copy_stream (ifp, fpout);
-
+
m_fclose(&fpout);
m_fclose(&ifp);