#include <lib-mime/mime.h>
#include <lib-sys/unix.h>
-#include <lib-ui/curses.h>
+#include <lib-ui/lib-ui.h>
#include <lib-ui/enter.h>
#include <lib-ui/menu.h>
#include <lib-mx/mx.h>
-#include <lib-crypt/crypt.h>
#include "mutt.h"
+#include "crypt.h"
#include "handler.h"
#include "recvattach.h"
#include "attach.h"
#include "copy.h"
-#define SW (option(OPTMBOXPANE)?SidebarWidth:0)
-
-static struct mapping_t AttachHelp[] = {
- {N_("Exit"), OP_EXIT},
- {N_("Save"), OP_SAVE},
- {N_("Pipe"), OP_PIPE},
- {N_("Print"), OP_PRINT},
- {N_("Help"), OP_HELP},
- {NULL, OP_NULL}
-};
-
void mutt_update_tree (ATTACHPTR ** idx, short idxlen)
{
char buf[STRING];
* %s = size
* %u = unlink
*/
-const char *mutt_attach_fmt (char *dest, ssize_t destlen,
- char op,
- const char *src,
- const char *prefix,
- const char *ifstr,
- const char *elstr,
- anytype data, format_flag flags)
+const char *
+mutt_attach_fmt(char *dest, ssize_t destlen, char op, const char *src,
+ const char *prefix, const char *ifstr, const char *elstr,
+ anytype data, format_flag flags)
{
char fmt[16];
char tmp[STRING];
char s[STRING];
_mutt_make_string (s, sizeof (s), MsgFmt, NULL, aptr->content->hdr,
- M_FORMAT_FORCESUBJ | M_FORMAT_MAKEPRINT |
- (option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0));
+ M_FORMAT_FORCESUBJ | M_FORMAT_MAKEPRINT);
if (*s) {
mutt_format_s (dest, destlen, prefix, s);
break;
}
if (flags & M_FORMAT_OPTIONAL)
- m_strformat(dest, destlen, optional ? ifstr : elstr,
+ m_strformat(dest, destlen, 0, optional ? ifstr : elstr,
mutt_attach_fmt, data, 0);
return src;
}
static void attach_entry(char *b, ssize_t blen, MUTTMENU * menu, int num)
{
- int w = MIN(COLS - SW, blen);
-
- m_strformat(b, w, AttachFormat, mutt_attach_fmt,
- ((ATTACHPTR **) menu->data)[num],
- option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0);
+ m_strformat(b, blen, getmaxx(main_w), AttachFormat, mutt_attach_fmt,
+ ((ATTACHPTR **) menu->data)[num], 0);
}
int mutt_tag_attach (MUTTMENU * menu, int n, int m)
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
char **directory)
{
- char *prompt;
+ const char *prompt;
char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX];
int is_message;
int append = 0;
}
static void
-mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int afilter)
+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 = -1;
if (afilter) {
- snprintf (warning, sizeof (warning),
- _("WARNING! You are about to overwrite %s, continue?"),
- body->filename);
- if (mutt_yesorno (warning, M_NO) != M_YES) {
- CLEARLINE (LINES - 1);
- return;
- }
- mutt_mktemp (tfile);
- } else {
- tfile[0] = '\0';
+ snprintf(warning, sizeof (warning),
+ _("WARNING! You are about to overwrite %s, continue?"),
+ body->filename);
+ if (mutt_yesorno (warning, M_NO) != M_YES)
+ return
+ tempfd = m_tempfd(tfile, sizeof(tfile), NONULL(mod_core.tmpdir), 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);
}
}
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(mod_core.tmpdir), 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);
int secured = 0;
int need_secured = 0;
- char helpstr[STRING];
MUTTMENU *menu;
BODY *cur = NULL;
MESSAGE *msg;
{
need_secured = 1;
- if ((hdr->security & ENCRYPT) && !crypt_valid_passphrase (hdr->security)) {
- mx_close_message (&msg);
- return;
- }
if (hdr->security & APPLICATION_SMIME) {
- if (hdr->env)
- crypt_smime_getkeys (hdr->env);
-
if (mutt_is_application_smime (hdr->content)) {
secured = !crypt_smime_decrypt_mime (msg->fp, &fp,
hdr->content, &cur);
menu->title = _("Attachments");
menu->make_entry = attach_entry;
menu->tag = mutt_tag_attach;
- menu->help =
- mutt_compile_help (helpstr, sizeof (helpstr), MENU_ATTACH, AttachHelp);
mutt_attach_init (cur);
attach_collapse (cur, 0, 1, 0);
mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
break;
- case OP_FORGET_PASSPHRASE:
- crypt_forget_passphrase ();
- break;
-
case OP_EXTRACT_KEYS:
crypt_pgp_extract_keys_from_attachment_list (fp, menu->tagprefix,
menu->
break;
}
-#ifdef USE_NNTP
- if (Context->magic == M_NNTP) {
- mutt_flushinp ();
- mutt_error _("Can't delete attachment from newsserver.");
-
- break;
- }
-#endif
-
if (hdr->security & (~PGP_TRADITIONAL_CHECKED)) {
mutt_message
_("Deletion of attachments from encrypted messages is unsupported.");
menu->redraw = REDRAW_FULL;
break;
-#ifdef USE_NNTP
- case OP_FORWARD_TO_GROUP:
- CHECK_ATTACH;
- mutt_attach_forward (fp, hdr, idx, idxlen,
- menu->tagprefix ? NULL : idx[menu->current]->
- content, SENDNEWS);
- menu->redraw = REDRAW_FULL;
- break;
-
- case OP_FOLLOWUP:
- CHECK_ATTACH;
-
- if (!idx[menu->current]->content->hdr->env->followup_to ||
- m_strcasecmp(idx[menu->current]->content->hdr->env->followup_to,
- "poster")
- || query_quadoption (OPT_FOLLOWUPTOPOSTER,
- _("Reply by mail as poster prefers?")) !=
- M_YES) {
- mutt_attach_reply (fp, hdr, idx, idxlen,
- menu->tagprefix ? NULL : idx[menu->current]->
- content, SENDNEWS | SENDREPLY);
- menu->redraw = REDRAW_FULL;
- break;
- }
-#endif
-
case OP_REPLY:
case OP_GROUP_REPLY:
case OP_LIST_REPLY:
op = OP_NULL;
}
+#undef CHECK_READONLY
+#undef CHECK_ATTACH
/* not reached */
}