#include <lib-lib/lib-lib.h>
#include <lib-mime/mime.h>
+#include <lib-sys/unix.h>
#include <lib-ui/curses.h>
#include <lib-ui/enter.h>
#include <lib-ui/menu.h>
-
-#include <lib-sys/unix.h>
+#include <lib-mx/mx.h>
+#include <lib-crypt/crypt.h>
#include "mutt.h"
#include "handler.h"
#include "recvattach.h"
#include "attach.h"
-#include "mx.h"
#include "copy.h"
-#include <lib-crypt/crypt.h>
-
-static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
-static char LastSaveFolder[_POSIX_PATH_MAX] = "";
-
-#define CHECK_READONLY if (Context->readonly) \
-{\
- mutt_flushinp (); \
- mutt_error _(Mailbox_is_read_only); \
- break; \
-}
-
-#define SW (option(OPTMBOXPANE)?SidebarWidth:0)
+#define SW (option(OPTMBOXPANE)?SidebarWidth:0)
static struct mapping_t AttachHelp[] = {
{N_("Exit"), OP_EXIT},
{NULL, OP_NULL}
};
-static int mutt_extract_path (char *filename, char *path)
-{
- char *tmp = p_new(char, _POSIX_PATH_MAX);
- char *help_ptr;
-
- help_ptr = tmp;
-
- while (*filename != '\0') {
- if (*filename == '/') {
- *help_ptr++ = *filename++;
- *help_ptr++ = '\0';
- strcat (path, tmp);
- help_ptr = tmp;
- }
- *help_ptr++ = *filename++;
- }
- p_delete(&tmp);
- return 0;
-}
-
void mutt_update_tree (ATTACHPTR ** idx, short idxlen)
{
char buf[STRING];
/* We don't support multipart messages in the compose menu yet */
if (!compose && !m->collapsed
&& ((m->type == TYPEMULTIPART && !mutt_is_multipart_encrypted(m))
- || mutt_is_message_type (m->type, m->subtype)))
+ || mutt_is_message_type(m)))
{
idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax,
level + 1, compose);
mutt_format_s (dest, destlen, prefix, aptr->content->description);
break;
}
- if (mutt_is_message_type (aptr->content->type, aptr->content->subtype)
- && MsgFmt && aptr->content->hdr) {
+ if (mutt_is_message_type(aptr->content) && MsgFmt && aptr->content->hdr)
+ {
char s[SHORT_STRING];
_mutt_make_string (s, sizeof (s), MsgFmt, NULL, aptr->content->hdr,
}
}
else if (aptr->content->description ||
- (mutt_is_message_type
- (aptr->content->type, aptr->content->subtype)
+ (mutt_is_message_type(aptr->content)
&& MsgFmt && aptr->content->hdr))
break;
/* FALLS THROUGH TO 'f' */
return cur->tagged - ot;
}
-int mutt_is_message_type (int type, const char *subtype)
-{
- if (type != TYPEMESSAGE)
- return 0;
-
- subtype = NONULL (subtype);
- return (ascii_strcasecmp (subtype, "rfc822") == 0
- || ascii_strcasecmp (subtype, "news") == 0);
-}
-
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
char **directory)
{
char *prompt;
char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX];
- char path[_POSIX_PATH_MAX] = "";
int is_message;
int append = 0;
int rc;
else if (body->hdr &&
body->encoding != ENCBASE64 &&
body->encoding != ENCQUOTEDPRINTABLE &&
- mutt_is_message_type (body->type, body->subtype))
+ mutt_is_message_type(body))
mutt_default_save (buf, sizeof (buf), body->hdr);
else
buf[0] = 0;
prompt = _("Save to file ('#' for last used folder): ");
while (prompt) {
- ret =
- mutt_get_field (prompt, buf, sizeof (buf),
- M_FILE | M_CLEAR | M_LASTFOLDER);
+ static char LastSaveFolder[_POSIX_PATH_MAX] = ".";
+
+ ret = mutt_get_field(prompt, buf, sizeof (buf),
+ M_FILE | M_CLEAR | M_LASTFOLDER);
if (((ret != 0) && (ret != 2)) || (!buf[0] && ret != 2))
return -1;
if (ret == 2) {
char tmpbuf[_POSIX_PATH_MAX];
- snprintf (tmpbuf, sizeof (tmpbuf), "%s%s", LastSaveFolder, buf);
+ snprintf (tmpbuf, sizeof (tmpbuf), "%s/%s", LastSaveFolder, buf);
m_strcpy(buf, sizeof(buf), tmpbuf);
- ret = mutt_get_field (_("Save to file: ")
- , buf, sizeof (buf), M_FILE);
+ ret = mutt_get_field(_("Save to file: "), buf, sizeof (buf), M_FILE);
if ((ret != 0) || (!buf[0]))
return -1;
}
- else {
- mutt_extract_path (buf, path);
- m_strcpy(LastSaveFolder, sizeof(LastSaveFolder), path);
- }
+ m_dirname(LastSaveFolder, sizeof(LastSaveFolder), buf);
prompt = NULL;
- mutt_expand_path (buf, sizeof (buf));
+ mutt_expand_path(buf, sizeof (buf));
is_message = (fp &&
body->hdr &&
body->encoding != ENCBASE64 &&
body->encoding != ENCQUOTEDPRINTABLE &&
- mutt_is_message_type (body->type, body->subtype));
+ mutt_is_message_type(body));
if (is_message) {
struct stat st;
rc = mutt_save_attachment (fp, top, tfile, append, hdr);
if (rc == 0 && AttachSep && (fpout = fopen (tfile, "a")) != NULL) {
fprintf (fpout, "%s", AttachSep);
- fclose (fpout);
+ m_fclose(&fpout);
}
}
else {
rc = mutt_save_attachment (fp, top, tfile, M_SAVE_APPEND, hdr);
if (rc == 0 && AttachSep && (fpout = fopen (tfile, "a")) != NULL) {
fprintf (fpout, "%s", AttachSep);
- fclose (fpout);
+ m_fclose(&fpout);
}
}
}
return;
}
mutt_copy_stream (ifp, state->fpout);
- fclose (ifp);
+ m_fclose(&ifp);
if (AttachSep)
state_puts (AttachSep, state);
}
mutt_endwin (NULL);
thepid = mutt_create_filter (buf, &state.fpout, NULL, NULL);
pipe_attachment_list (buf, fp, tag, top, afilter, &state);
- fclose (state.fpout);
+ m_fclose(&state.fpout);
if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
mutt_any_key_to_continue (NULL);
}
0) {
if ((ifp = fopen (newfile, "r")) != NULL) {
mutt_copy_stream (ifp, state->fpout);
- fclose (ifp);
+ m_fclose(&ifp);
if (AttachSep)
state_puts (AttachSep, state);
}
p_clear(&state, 1);
thepid = mutt_create_filter (NONULL (PrintCmd), &state.fpout, NULL, NULL);
print_attachment_list (fp, tag, top, &state);
- fclose (state.fpout);
+ m_fclose(&state.fpout);
if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
mutt_any_key_to_continue (NULL);
}
{
ATTACHPTR **idx = *idxp;
-#if 0
- int old_optweed = option (OPTWEED);
-
- set_option (OPTWEED);
-#endif
-
do {
switch (op) {
case OP_DISPLAY_HEADERS:
}
while (op != OP_NULL);
-#if 0
- if (option (OPTWEED) != old_optweed)
- toggle_option (OPTWEED);
-#endif
return op;
}
for (; b; b = b->next) {
i = init || b->collapsed;
if (i && option (OPTDIGESTCOLLAPSE) && b->type == TYPEMULTIPART
- && !ascii_strcasecmp (b->subtype, "digest"))
+ && mime_which_token(b->subtype, -1) == MIME_DIGEST)
attach_collapse (b->parts, 1, 1, 0);
- else if (b->type == TYPEMULTIPART
- || mutt_is_message_type (b->type, b->subtype))
+ else if (b->type == TYPEMULTIPART || mutt_is_message_type(b))
attach_collapse (b->parts, collapse, i, 0);
b->collapsed = collapse;
if (just_one)
}
}
-static const char *Function_not_permitted =
-N_("Function not permitted in attach-message mode.");
-
-#define CHECK_ATTACH if(option(OPTATTACHMSG)) \
- {\
- mutt_flushinp (); \
- mutt_error _(Function_not_permitted); \
- break; \
- }
-
-
-
-
void mutt_view_attachments (HEADER * hdr)
{
int secured = 0;
secured = !crypt_smime_decrypt_mime (_fp, &fp, _cur, &cur);
body_list_wipe(&_cur);
- safe_fclose (&_fp);
+ m_fclose(&_fp);
}
}
else
attach_collapse (cur, 0, 1, 0);
mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
+#define CHECK_READONLY \
+ if (Context->readonly) { \
+ mutt_flushinp (); \
+ mutt_error _("Mailbox is read-only."); \
+ break; \
+ }
+
+#define CHECK_ATTACH \
+ if (option(OPTATTACHMSG)) { \
+ mutt_flushinp (); \
+ mutt_error _("Function not permitted in attach-message mode."); \
+ break; \
+ }
+
for (;;) {
if (op == OP_NULL)
- op = mutt_menuLoop (menu);
+ op = mutt_menuLoop(menu);
switch (op) {
case OP_ATTACH_VIEW_MAILCAP:
mutt_view_attachment (fp, idx[menu->current]->content, M_MAILCAP,
idxmax = 0;
if (need_secured && secured) {
- fclose (fp);
+ m_fclose(&fp);
body_list_wipe(&cur);
}
op = OP_NULL;
}
-
/* not reached */
}