X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=commands.c;h=c17c0cebcc050e8fc8362f96004a6bc9c32728a4;hp=5626cb8028b79e9f6729acdc728504d951db2632;hb=debd2491451020d9fd5f0440bb2dada0b9eac6e7;hpb=c3e57678c8be193fc137854020f3a90887be97c9 diff --git a/commands.c b/commands.c index 5626cb8..c17c0ce 100644 --- a/commands.c +++ b/commands.c @@ -17,7 +17,6 @@ #include "mutt_menu.h" #include "mime.h" #include "sort.h" -#include "mailbox.h" #include "copy.h" #include "mx.h" #include "pager.h" @@ -36,6 +35,11 @@ #include "buffy.h" #endif +#include "lib/mem.h" +#include "lib/intl.h" +#include "lib/str.h" +#include "lib/debug.h" + #include #include #include @@ -57,8 +61,9 @@ int mutt_display_message (HEADER * cur) int cmflags = M_CM_DECODE | M_CM_DISPLAY | M_CM_CHARCONV; FILE *fpout = NULL; FILE *fpfilterout = NULL; + MESSAGE *msg = NULL; pid_t filterpid = -1; - int res; + int res = 0; snprintf (buf, sizeof (buf), "%s/%s", TYPE (cur->content), cur->content->subtype); @@ -66,38 +71,6 @@ int mutt_display_message (HEADER * cur) mutt_parse_mime_message (Context, cur); mutt_message_hook (Context, cur, M_MESSAGEHOOK); - /* see if crytpo is needed for this message. if so, we should exit curses */ - if (WithCrypto && cur->security) { - if (cur->security & ENCRYPT) { - if (cur->security & APPLICATION_SMIME) - crypt_smime_getkeys (cur->env); - if (!crypt_valid_passphrase (cur->security)) - return 0; - - cmflags |= M_CM_VERIFY; - } - else if (cur->security & SIGN) { - /* find out whether or not the verify signature */ - if (query_quadoption (OPT_VERIFYSIG, _("Verify PGP signature?")) == - M_YES) { - cmflags |= M_CM_VERIFY; - } - } - } - - if (cmflags & M_CM_VERIFY || cur->security & ENCRYPT) { - if (cur->security & APPLICATION_PGP) { - if (cur->env->from) - crypt_pgp_invoke_getkeys (cur->env->from); - - crypt_invoke_message (APPLICATION_PGP); - } - - if (cur->security & APPLICATION_SMIME) - crypt_invoke_message (APPLICATION_SMIME); - } - - mutt_mktemp (tempfile); if ((fpout = safe_fopen (tempfile, "w")) == NULL) { mutt_error _("Could not create temporary file!"); @@ -127,9 +100,52 @@ int mutt_display_message (HEADER * cur) fputs ("\n\n", fpout); } - res = mutt_copy_message (fpout, Context, cur, cmflags, - (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | - CH_DECODE | CH_FROM); + msg = mx_open_message (Context, cur->msgno); + if (msg == NULL) res = -1; + + if (res != -1) { + /* see if crytpo is needed for this message. if so, we should exit curses */ + if (WithCrypto && cur->security) { + if (cur->security & ENCRYPT) { + if (cur->security & APPLICATION_SMIME) + crypt_smime_getkeys (cur->env); + if (!crypt_valid_passphrase (cur->security)) + return 0; + + cmflags |= M_CM_VERIFY; + } + else if (cur->security & SIGN) { + /* find out whether or not the verify signature */ + if (query_quadoption (OPT_VERIFYSIG, _("Verify PGP signature?")) == + M_YES) { + cmflags |= M_CM_VERIFY; + } + } + } + + if (cmflags & M_CM_VERIFY || cur->security & ENCRYPT) { + if (cur->security & APPLICATION_PGP) { + if (cur->env->from) + crypt_pgp_invoke_getkeys (cur->env->from); + + crypt_invoke_message (APPLICATION_PGP); + } + + if (cur->security & APPLICATION_SMIME) + crypt_invoke_message (APPLICATION_SMIME); + } + + res = _mutt_copy_message (fpout, msg->fp, cur, cur->content, cmflags, + (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | + CH_DECODE | CH_FROM); + if (res == 0 && (ferror(fpout) || feof(fpout))) { + debug_print (1, ("_mutt_copy_message failed to detect EOF!\n")); + res = -1; + } + + mx_close_message (&msg); + } + if ((safe_fclose (&fpout) != 0 && errno != EPIPE) || res == -1) { mutt_error (_("Could not copy message")); if (fpfilterout != NULL) { @@ -348,7 +364,7 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, mutt_endwin (NULL); if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0) { - mutt_perror _("Can't create filter process"); + mutt_perror (_("Can't create filter process")); return 1; } @@ -379,7 +395,7 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, M_MESSAGEHOOK); mutt_endwin (NULL); if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0) { - mutt_perror _("Can't create filter process"); + mutt_perror (_("Can't create filter process")); return 1; } @@ -396,7 +412,7 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, else { mutt_endwin (NULL); if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0) { - mutt_perror _("Can't create filter process"); + mutt_perror (_("Can't create filter process")); return 1; } @@ -738,7 +754,7 @@ int mutt_save_message (HEADER * h, int delete, mutt_message (_("Copying to %s..."), buf); #ifdef USE_IMAP - if (Context->magic == M_IMAP && !(decode || decrypt) && mx_is_imap (buf)) { + if (Context->magic == M_IMAP && !(decode || decrypt) && mx_get_magic (buf) == M_IMAP) { switch (imap_copy_messages (Context, h, buf, delete)) { /* success */ case 0: @@ -774,9 +790,9 @@ int mutt_save_message (HEADER * h, int delete, if (need_buffy_cleanup) { #ifdef BUFFY_SIZE - tmp = mutt_find_mailbox (buf); + tmp = buffy_find_mailbox (buf); if (tmp && tmp->new <= 0) - mutt_update_mailbox (tmp); + buffy_update_mailbox (tmp); #else /* fix up the times so buffy won't get confused */ if (st.st_mtime > st.st_atime) { @@ -807,26 +823,26 @@ int mutt_update_list_file (char *filename, char *section, char *key, int ext = 0, done = 0, r = 0; snprintf (oldfile, sizeof (oldfile), "%s.bak", filename); - dprint (1, (debugfile, "Renaming %s to %s\n", filename, oldfile)); + debug_print (1, ("Renaming %s to %s\n", filename, oldfile)); /* if file not exist, create it */ if ((ifp = safe_fopen (filename, "a"))) fclose (ifp); if (_mutt_rename_file (filename, oldfile, 1)) { - mutt_perror _("Unable to create backup file"); + mutt_perror (_("Unable to create backup file")); return (-1); } - dprint (1, (debugfile, "Opening %s\n", oldfile)); + debug_print (1, ("Opening %s\n", oldfile)); if (!(ifp = safe_fopen (oldfile, "r"))) { - mutt_perror _("Unable to open backup file for reading"); + mutt_perror (_("Unable to open backup file for reading")); return (-1); } - dprint (1, (debugfile, "Opening %s\n", filename)); + debug_print (1, ("Opening %s\n", filename)); if (!(ofp = safe_fopen (filename, "w"))) { fclose (ifp); - mutt_perror _("Unable to open new file for writing"); + mutt_perror (_("Unable to open new file for writing")); return (-1); } @@ -845,7 +861,7 @@ int mutt_update_list_file (char *filename, char *section, char *key, while (*c && *c != '\n') c++; c[0] = 0; /* strip EOL */ - if (!strncmp (buf, "#: ", 3) && !mutt_strcasecmp (buf + 3, section)) + if (!strncmp (buf, "#: ", 3) && !safe_strcasecmp (buf + 3, section)) done++; } if (r != EOF && !done) { @@ -873,8 +889,8 @@ int mutt_update_list_file (char *filename, char *section, char *key, done++; break; } - else if (key && !strncmp (buf, key, strlen (key)) && - (!*key || buf[strlen (key)] == ' ')) { + else if (key && !strncmp (buf, key, mutt_strlen (key)) && + (!*key || buf[mutt_strlen (key)] == ' ')) { c = buf; ext = 0; while (*c && (*c != '\r') && (*c != '\n')) @@ -918,7 +934,7 @@ int mutt_update_list_file (char *filename, char *section, char *key, void mutt_version (void) { - mutt_message ("Mutt-ng %s (%s)", MUTT_VERSION, ReleaseDate); + mutt_message ("Mutt-ng %s (%s) based on Mutt 1.5.9", MUTT_VERSION, ReleaseDate); } void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) @@ -943,7 +959,7 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) size_t l; for (p = b->parameter; p; p = p->next) { - l = strlen (buf); + l = mutt_strlen (buf); rfc822_cat (tmp, sizeof (tmp), p->value, MimeSpecials); snprintf (buf + l, sizeof (buf) - l, "; %s=%s", p->attribute, tmp);