X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=recvattach.c;h=dc51b4de728521a2226218ae5fbc546c156d85e3;hp=97cb41a031655813e09c6d5b5282e39ae3d9d288;hb=6c9a7df6f0a909d987634888cbb7ccd9b17ecc09;hpb=45528548fd2dddcbef9396b0589ec88d722766ee diff --git a/recvattach.c b/recvattach.c index 97cb41a..dc51b4d 100644 --- a/recvattach.c +++ b/recvattach.c @@ -11,33 +11,21 @@ #include #include +#include #include #include #include - -#include +#include +#include #include "mutt.h" #include "handler.h" #include "recvattach.h" #include "attach.h" -#include "mx.h" #include "copy.h" -#include - -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}, @@ -48,26 +36,6 @@ static struct mapping_t AttachHelp[] = { {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]; @@ -142,7 +110,7 @@ ATTACHPTR **mutt_gen_attach_list (BODY * m, /* 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); @@ -217,8 +185,8 @@ const char *mutt_attach_fmt (char *dest, 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, @@ -235,8 +203,7 @@ const char *mutt_attach_fmt (char *dest, } } 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' */ @@ -369,22 +336,11 @@ int mutt_tag_attach (MUTTMENU * menu, int n, int m) 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; @@ -400,42 +356,39 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr, 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; @@ -505,14 +458,14 @@ void mutt_save_attachment_list (FILE * fp, int tag, BODY * top, HEADER * hdr, 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); } } } @@ -597,7 +550,7 @@ static void pipe_attachment (FILE * fp, BODY * b, STATE * state) return; } mutt_copy_stream (ifp, state->fpout); - fclose (ifp); + m_fclose(&ifp); if (AttachSep) state_puts (AttachSep, state); } @@ -643,7 +596,7 @@ void mutt_pipe_attachment_list (FILE * fp, int tag, BODY * top, int afilter) 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); } @@ -701,7 +654,7 @@ static void print_attachment_list (FILE * fp, int tag, BODY * top, 0) { if ((ifp = fopen (newfile, "r")) != NULL) { mutt_copy_stream (ifp, state->fpout); - fclose (ifp); + m_fclose(&ifp); if (AttachSep) state_puts (AttachSep, state); } @@ -738,7 +691,7 @@ void mutt_print_attachment_list (FILE * fp, int tag, BODY * top) 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); } @@ -776,12 +729,6 @@ mutt_attach_display_loop (MUTTMENU * menu, int op, FILE * fp, HEADER * hdr, { ATTACHPTR **idx = *idxp; -#if 0 - int old_optweed = option (OPTWEED); - - set_option (OPTWEED); -#endif - do { switch (op) { case OP_DISPLAY_HEADERS: @@ -837,10 +784,6 @@ mutt_attach_display_loop (MUTTMENU * menu, int op, FILE * fp, HEADER * hdr, } while (op != OP_NULL); -#if 0 - if (option (OPTWEED) != old_optweed) - toggle_option (OPTWEED); -#endif return op; } @@ -852,10 +795,9 @@ static void attach_collapse (BODY * b, short collapse, short init, 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) @@ -873,19 +815,6 @@ void mutt_attach_init (BODY * b) } } -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; @@ -938,7 +867,7 @@ void mutt_view_attachments (HEADER * hdr) secured = !crypt_smime_decrypt_mime (_fp, &fp, _cur, &cur); body_list_wipe(&_cur); - safe_fclose (&_fp); + m_fclose(&_fp); } } else @@ -976,9 +905,23 @@ void mutt_view_attachments (HEADER * hdr) 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, @@ -1228,7 +1171,7 @@ void mutt_view_attachments (HEADER * hdr) idxmax = 0; if (need_secured && secured) { - fclose (fp); + m_fclose(&fp); body_list_wipe(&cur); } @@ -1238,6 +1181,5 @@ void mutt_view_attachments (HEADER * hdr) op = OP_NULL; } - /* not reached */ }