/* 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);
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);
char tempfile[_POSIX_PATH_MAX];
char buf[HUGE_STRING];
FILE *tfp;
+ int tempfd;
short sgn = 0;
short enc = 0;
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;
}
char tempfile[_POSIX_PATH_MAX];
char buf[HUGE_STRING];
FILE *tfp;
+ int tempfd;
short sgn = 0;
short enc = 0;
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;
}
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);