X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=commands.c;h=349358751f60536006e14d1b2a733b884ef091b2;hp=c17c0cebcc050e8fc8362f96004a6bc9c32728a4;hb=fc7b90fd61ac9efd35a5b506cc10679969d84cba;hpb=96d53ff49c308769efbf708e1e65819077cb7af6 diff --git a/commands.c b/commands.c index c17c0ce..3493587 100644 --- a/commands.c +++ b/commands.c @@ -8,48 +8,32 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include #include "mutt.h" -#include "mutt_curses.h" -#include "mutt_menu.h" -#include "mime.h" +#include "alias.h" +#include "recvattach.h" #include "sort.h" #include "copy.h" -#include "mx.h" #include "pager.h" -#include "mutt_crypt.h" +#include #include "mutt_idna.h" -#include "rfc1524.h" #include #include #include -#ifdef USE_IMAP -#include "imap.h" -#endif - -#ifdef BUFFY_SIZE -#include "buffy.h" -#endif - -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" -#include "lib/debug.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -extern char *ReleaseDate; +#include /* The folder the user last saved to. Used by ci_save_message() */ static char LastSaveFolder[_POSIX_PATH_MAX] = ""; @@ -71,11 +55,10 @@ int mutt_display_message (HEADER * cur) mutt_parse_mime_message (Context, cur); mutt_message_hook (Context, cur, M_MESSAGEHOOK); - mutt_mktemp (tempfile); - if ((fpout = safe_fopen (tempfile, "w")) == NULL) { + fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + if (!fpout) { mutt_error _("Could not create temporary file!"); - - return (0); + return 0; } if (DisplayFilter && *DisplayFilter) { @@ -86,13 +69,13 @@ int mutt_display_message (HEADER * cur) -1, fileno (fpfilterout), -1); if (filterpid < 0) { mutt_error (_("Cannot create display filter")); - safe_fclose (&fpfilterout); + m_fclose(&fpfilterout); unlink (tempfile); return 0; } } - if (!Pager || mutt_strcmp (Pager, "builtin") == 0) + if (!Pager || m_strcmp(Pager, "builtin") == 0) builtin = 1; else { mutt_make_string (buf, sizeof (buf), NONULL (PagerFmt), Context, cur); @@ -105,7 +88,7 @@ int mutt_display_message (HEADER * cur) if (res != -1) { /* see if crytpo is needed for this message. if so, we should exit curses */ - if (WithCrypto && cur->security) { + if (cur->security) { if (cur->security & ENCRYPT) { if (cur->security & APPLICATION_SMIME) crypt_smime_getkeys (cur->env); @@ -139,43 +122,38 @@ int mutt_display_message (HEADER * cur) (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) { + if ((m_fclose(&fpout) != 0 && errno != EPIPE) || res == -1) { mutt_error (_("Could not copy message")); if (fpfilterout != NULL) { mutt_wait_filter (filterpid); - safe_fclose (&fpfilterout); + m_fclose(&fpfilterout); } - mutt_unlink (tempfile); - return 0; } if (fpfilterout != NULL && mutt_wait_filter (filterpid) != 0) mutt_any_key_to_continue (NULL); - safe_fclose (&fpfilterout); /* XXX - check result? */ + m_fclose(&fpfilterout); /* XXX - check result? */ - if (WithCrypto) { - /* update crypto information for this message */ - cur->security |= crypt_query (cur->content); + /* update crypto information for this message */ + cur->security &= ~(GOODSIGN|BADSIGN); + cur->security |= crypt_query (cur->content); - /* Remove color cache for this message, in case there - are color patterns for both ~g and ~V */ - cur->pair = 0; - } + /* Remove color cache for this message, in case there + are color patterns for both ~g and ~V */ + cur->pair = 0; if (builtin) { pager_t info; - if (WithCrypto - && (cur->security & APPLICATION_SMIME) && (cmflags & M_CM_VERIFY)) { + if ((cur->security & APPLICATION_SMIME) && (cmflags & M_CM_VERIFY)) { if (cur->security & GOODSIGN) { if (!crypt_smime_verify_sender (cur)) mutt_message (_("S/MIME signature successfully verified.")); @@ -189,19 +167,18 @@ int mutt_display_message (HEADER * cur) mutt_error (_("S/MIME signature could NOT be verified.")); } - if (WithCrypto - && (cur->security & APPLICATION_PGP) && (cmflags & M_CM_VERIFY)) { + if ((cur->security & APPLICATION_PGP) && (cmflags & M_CM_VERIFY)) { if (cur->security & GOODSIGN) mutt_message (_("PGP signature successfully verified.")); else if (cur->security & PARTSIGN) mutt_message (_ ("Warning: Part of this message has not been signed.")); - else + else if (cur->security & SIGN) mutt_message (_("PGP signature could NOT be verified.")); } /* Invoke the builtin pager */ - memset (&info, 0, sizeof (pager_t)); + p_clear(&info, 1); info.hdr = cur; info.ctx = Context; rc = mutt_pager (NULL, tempfile, M_PAGER_MESSAGE, &info); @@ -230,16 +207,16 @@ int mutt_display_message (HEADER * cur) void ci_bounce_message (HEADER * h, int *redraw) { - char prompt[SHORT_STRING]; + char prompt[STRING]; char buf[HUGE_STRING] = { 0 }; - ADDRESS *adr = NULL; + address_t *adr = NULL; char *err = NULL; int rc; if (h) - strfcpy (prompt, _("Bounce message to: "), sizeof (prompt)); + m_strcpy(prompt, sizeof(prompt), _("Bounce message to: ")); else - strfcpy (prompt, _("Bounce tagged messages to: "), sizeof (prompt)); + m_strcpy(prompt, sizeof(prompt), _("Bounce tagged messages to: ")); rc = mutt_get_field (prompt, buf, sizeof (buf), M_ALIAS); @@ -261,30 +238,29 @@ void ci_bounce_message (HEADER * h, int *redraw) if (mutt_addrlist_to_idna (adr, &err) < 0) { mutt_error (_("Bad IDN: '%s'"), err); - FREE (&err); - rfc822_free_address (&adr); + p_delete(&err); + address_list_wipe(&adr); return; } buf[0] = 0; - rfc822_write_address (buf, sizeof (buf), adr, 1); + rfc822_addrcat(buf, sizeof (buf), adr, 1); #define extra_space (15 + 7 + 2) snprintf (prompt, sizeof (prompt), (h ? _("Bounce message to %s") : _("Bounce messages to %s")), buf); - if (mutt_strwidth (prompt) > COLS - extra_space) { - mutt_format_string (prompt, sizeof (prompt), - 0, COLS - extra_space, 0, 0, - prompt, sizeof (prompt), 0); - safe_strcat (prompt, sizeof (prompt), "...?"); + if (m_strwidth(prompt) > COLS - extra_space) { + mutt_format_string(prompt, sizeof(prompt), 0, COLS - extra_space, 0, 0, + prompt, sizeof(prompt), 0); + m_strcat(prompt, sizeof(prompt), "...?"); + } else { + m_strcat(prompt, sizeof(prompt), "?"); } - else - safe_strcat (prompt, sizeof (prompt), "?"); if (query_quadoption (OPT_BOUNCE, prompt) != M_YES) { - rfc822_free_address (&adr); + address_list_wipe(&adr); CLEARLINE (LINES - 1); mutt_message (h ? _("Message not bounced.") : _("Messages not bounced.")); return; @@ -293,7 +269,7 @@ void ci_bounce_message (HEADER * h, int *redraw) CLEARLINE (LINES - 1); rc = mutt_bounce_message (NULL, h, adr); - rfc822_free_address (&adr); + address_list_wipe(&adr); /* If no error, or background, display message. */ if ((rc == 0) || (rc == S_BKG)) mutt_message (h ? _("Message bounced.") : _("Messages bounced.")); @@ -323,7 +299,7 @@ static void pipe_msg (HEADER * h, FILE * fp, int decode, int print) pipe_set_flags (decode, print, &cmflags, &chflags); - if (WithCrypto && decode && h->security & ENCRYPT) { + if (decode && h->security & ENCRYPT) { if (!crypt_valid_passphrase (h->security)) return; endwin (); @@ -338,8 +314,8 @@ static void pipe_msg (HEADER * h, FILE * fp, int decode, int print) /* the following code is shared between printing and piping */ -static int _mutt_pipe_message (HEADER * h, char *cmd, - int decode, int print, int split, char *sep) +static int _mutt_pipe_message(HEADER * h, char *cmd, int decode, int print, + int split, const char *sep) { int i, rc = 0; @@ -356,7 +332,7 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, mutt_message_hook (Context, h, M_MESSAGEHOOK); - if (WithCrypto && decode) { + if (decode) { mutt_parse_mime_message (Context, h); if (h->security & ENCRYPT && !crypt_valid_passphrase (h->security)) return 1; @@ -370,12 +346,12 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, } pipe_msg (h, fpout, decode, print); - fclose (fpout); + m_fclose(&fpout); rc = mutt_wait_filter (thepid); } else { /* handle tagged messages */ - if (WithCrypto && decode) { + if (decode) { for (i = 0; i < Context->vcount; i++) if (Context->hdrs[Context->v2r[i]]->tagged) { mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], @@ -403,7 +379,7 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, /* add the message separator */ if (sep) fputs (sep, fpout); - safe_fclose (&fpout); + m_fclose(&fpout); if (mutt_wait_filter (thepid) != 0) rc = 1; } @@ -426,7 +402,7 @@ static int _mutt_pipe_message (HEADER * h, char *cmd, fputs (sep, fpout); } } - safe_fclose (&fpout); + m_fclose(&fpout); if (mutt_wait_filter (thepid) != 0) rc = 1; } @@ -455,7 +431,7 @@ void mutt_pipe_message (HEADER * h) void mutt_print_message (HEADER * h) { - if (quadoption (OPT_PRINT) && (!PrintCmd || !*PrintCmd)) { + if (quadoption (OPT_PRINT) && m_strisempty(PrintCmd)) { mutt_message (_("No printing command has been defined.")); return; } @@ -543,7 +519,7 @@ void mutt_shell_escape (void) buf[0] = 0; if (mutt_get_field (_("Shell command: "), buf, sizeof (buf), M_CMD) == 0) { if (!buf[0] && Shell) - strfcpy (buf, Shell, sizeof (buf)); + m_strcpy(buf, sizeof(buf), Shell); if (buf[0]) { CLEARLINE (LINES - 1); mutt_endwin (NULL); @@ -558,7 +534,7 @@ void mutt_shell_escape (void) void mutt_enter_command (void) { BUFFER err, token; - char buffer[LONG_STRING], errbuf[SHORT_STRING]; + char buffer[LONG_STRING], errbuf[STRING]; int r; buffer[0] = 0; @@ -567,9 +543,9 @@ void mutt_enter_command (void) return; err.data = errbuf; err.dsize = sizeof (errbuf); - memset (&token, 0, sizeof (token)); + p_clear(&token, 1); r = mutt_parse_rc_line (buffer, &token, &err); - FREE (&token.data); + p_delete(&token.data); if (errbuf[0]) { /* since errbuf could potentially contain printf() sequences in it, we must call mutt_error() in this fashion so that vsprintf() @@ -583,11 +559,11 @@ void mutt_enter_command (void) void mutt_display_address (ENVELOPE * env) { - char *pfx = NULL; - char buf[SHORT_STRING]; - ADDRESS *adr = NULL; + const char *pfx = NULL; + char buf[STRING]; + address_t *adr = NULL; - adr = mutt_get_address (env, &pfx); + adr = mutt_get_address(env, &pfx); if (!adr) return; @@ -600,7 +576,7 @@ void mutt_display_address (ENVELOPE * env) */ buf[0] = 0; - rfc822_write_address (buf, sizeof (buf), adr, 0); + rfc822_addrcat(buf, sizeof (buf), adr, 0); mutt_message ("%s: %s", pfx, buf); } @@ -610,17 +586,14 @@ static void set_copy_flags (HEADER * hdr, int decode, int decrypt, *cmflags = 0; *chflags = CH_UPDATE_LEN; - if (WithCrypto && !decode && decrypt && (hdr->security & ENCRYPT)) { - if ((WithCrypto & APPLICATION_PGP) - && mutt_is_multipart_encrypted (hdr->content)) { + if (!decode && decrypt && (hdr->security & ENCRYPT)) { + if (mutt_is_multipart_encrypted (hdr->content)) { *chflags = CH_NONEWLINE | CH_XMIT | CH_MIME; *cmflags = M_CM_DECODE_PGP; } - else if ((WithCrypto & APPLICATION_PGP) - && mutt_is_application_pgp (hdr->content) & ENCRYPT) + else if (mutt_is_application_pgp (hdr->content) & ENCRYPT) decode = 1; - else if ((WithCrypto & APPLICATION_SMIME) - && mutt_is_application_smime (hdr->content) & ENCRYPT) { + else if (mutt_is_application_smime (hdr->content) & ENCRYPT) { *chflags = CH_NONEWLINE | CH_XMIT | CH_MIME; *cmflags = M_CM_DECODE_SMIME; } @@ -641,41 +614,37 @@ static void set_copy_flags (HEADER * hdr, int decode, int decrypt, } } -void _mutt_save_message (HEADER * h, CONTEXT * ctx, int delete, int decode, - int decrypt) -{ +int _mutt_save_message (HEADER * h, CONTEXT * ctx, int delete, int decode, + int decrypt) { int cmflags, chflags; + int rc; set_copy_flags (h, decode, decrypt, &cmflags, &chflags); if (decode || decrypt) mutt_parse_mime_message (Context, h); - if (mutt_append_message (ctx, Context, h, cmflags, chflags) == 0) { - if (delete) { - mutt_set_flag (Context, h, M_DELETE, 1); - if (option (OPTDELETEUNTAG)) - mutt_set_flag (Context, h, M_TAG, 0); - } + if ((rc = mutt_append_message (ctx, Context, h, cmflags, chflags)) != 0) + return rc; + + if (delete) { + mutt_set_flag (Context, h, M_DELETE, 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, h, M_TAG, 0); mutt_set_flag (Context, h, M_APPENDED, 1); } + return (0); } /* returns 0 if the copy/save was successful, or -1 on error/abort */ int mutt_save_message (HEADER * h, int delete, - int decode, int decrypt, int *redraw) -{ + int decode, int decrypt, int *redraw) { int i, need_buffy_cleanup; int need_passphrase = 0, app = 0; - char prompt[SHORT_STRING], buf[_POSIX_PATH_MAX]; + char prompt[STRING], buf[_POSIX_PATH_MAX]; CONTEXT ctx; struct stat st; - -#ifdef BUFFY_SIZE - BUFFY *tmp = NULL; -#else struct utimbuf ut; -#endif *redraw = 0; @@ -690,10 +659,8 @@ int mutt_save_message (HEADER * h, int delete, if (h) { - if (WithCrypto) { - need_passphrase = h->security & ENCRYPT; - app = h->security; - } + need_passphrase = h->security & ENCRYPT; + app = h->security; mutt_message_hook (Context, h, M_MESSAGEHOOK); mutt_default_save (buf, sizeof (buf), h); } @@ -711,10 +678,8 @@ int mutt_save_message (HEADER * h, int delete, if (h) { mutt_message_hook (Context, h, M_MESSAGEHOOK); mutt_default_save (buf, sizeof (buf), h); - if (WithCrypto) { - need_passphrase = h->security & ENCRYPT; - app = h->security; - } + need_passphrase = h->security & ENCRYPT; + app = h->security; h = NULL; } } @@ -736,10 +701,10 @@ int mutt_save_message (HEADER * h, int delete, /* This is an undocumented feature of ELM pointed out to me by Felix von * Leitner */ - if (mutt_strcmp (buf, ".") == 0) - strfcpy (buf, LastSaveFolder, sizeof (buf)); + if (m_strcmp(buf, ".") == 0) + m_strcpy(buf, sizeof(buf), LastSaveFolder); else - strfcpy (LastSaveFolder, buf, sizeof (LastSaveFolder)); + m_strcpy(LastSaveFolder, sizeof(LastSaveFolder), buf); mutt_expand_path (buf, sizeof (buf)); @@ -747,13 +712,12 @@ int mutt_save_message (HEADER * h, int delete, if (mutt_save_confirm (buf, &st) != 0) return -1; - if (WithCrypto && need_passphrase && (decode || decrypt) + if (need_passphrase && (decode || decrypt) && !crypt_valid_passphrase (app)) return -1; mutt_message (_("Copying to %s..."), buf); -#ifdef USE_IMAP if (Context->magic == M_IMAP && !(decode || decrypt) && mx_get_magic (buf) == M_IMAP) { switch (imap_copy_messages (Context, h, buf, delete)) { /* success */ @@ -768,18 +732,23 @@ int mutt_save_message (HEADER * h, int delete, return -1; } } -#endif if (mx_open_mailbox (buf, M_APPEND, &ctx) != NULL) { - if (h) - _mutt_save_message (h, &ctx, delete, decode, decrypt); - else { + if (h) { + if (_mutt_save_message (h, &ctx, delete, decode, decrypt) != 0) { + mx_close_mailbox (&ctx, NULL); + return (-1); + } + } else { for (i = 0; i < Context->vcount; i++) { if (Context->hdrs[Context->v2r[i]]->tagged) { mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK); - _mutt_save_message (Context->hdrs[Context->v2r[i]], &ctx, delete, - decode, decrypt); + if (_mutt_save_message (Context->hdrs[Context->v2r[i]], &ctx, delete, + decode, decrypt) != 0) { + mx_close_mailbox (&ctx, NULL); + return (-1); + } } } } @@ -789,20 +758,14 @@ int mutt_save_message (HEADER * h, int delete, mx_close_mailbox (&ctx, NULL); if (need_buffy_cleanup) { -#ifdef BUFFY_SIZE - tmp = buffy_find_mailbox (buf); - if (tmp && tmp->new <= 0) - buffy_update_mailbox (tmp); -#else /* fix up the times so buffy won't get confused */ if (st.st_mtime > st.st_atime) { ut.actime = st.st_atime; ut.modtime = time (NULL); utime (buf, &ut); - } - else + } else { utime (buf, NULL); -#endif + } } mutt_clear_error (); @@ -812,129 +775,9 @@ int mutt_save_message (HEADER * h, int delete, return -1; } -int mutt_update_list_file (char *filename, char *section, char *key, - char *line) -{ - FILE *ifp; - FILE *ofp; - char buf[HUGE_STRING]; - char oldfile[_POSIX_PATH_MAX]; - char *c; - int ext = 0, done = 0, r = 0; - - snprintf (oldfile, sizeof (oldfile), "%s.bak", filename); - 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")); - - return (-1); - } - debug_print (1, ("Opening %s\n", oldfile)); - if (!(ifp = safe_fopen (oldfile, "r"))) { - mutt_perror (_("Unable to open backup file for reading")); - - return (-1); - } - debug_print (1, ("Opening %s\n", filename)); - if (!(ofp = safe_fopen (filename, "w"))) { - fclose (ifp); - mutt_perror (_("Unable to open new file for writing")); - - return (-1); - } - if (mx_lock_file (filename, fileno (ofp), 1, 0, 1)) { - fclose (ofp); - fclose (ifp); - mutt_error (_("Unable to lock %s, old file saved as %s"), filename, - oldfile); - return (-1); - } - - if (section) { - while (r != EOF && !done && fgets (buf, sizeof (buf), ifp)) { - r = fputs (buf, ofp); - c = buf; - while (*c && *c != '\n') - c++; - c[0] = 0; /* strip EOL */ - if (!strncmp (buf, "#: ", 3) && !safe_strcasecmp (buf + 3, section)) - done++; - } - if (r != EOF && !done) { - snprintf (buf, sizeof (buf), "#: %s\n", section); - r = fputs (buf, ofp); - } - done = 0; - } - - while (r != EOF && fgets (buf, sizeof (buf), ifp)) { - if (ext) { - c = buf; - while (*c && (*c != '\r') && (*c != '\n')) - c++; - c--; - if (*c != '\\') - ext = 0; - } - else if ((section && !strncmp (buf, "#: ", 3))) { - if (!done && line) { - fputs (line, ofp); - fputc ('\n', ofp); - } - r = fputs (buf, ofp); - done++; - break; - } - else if (key && !strncmp (buf, key, mutt_strlen (key)) && - (!*key || buf[mutt_strlen (key)] == ' ')) { - c = buf; - ext = 0; - while (*c && (*c != '\r') && (*c != '\n')) - c++; - c--; - if (*c == '\\') - ext = 1; - if (!done && line) { - r = fputs (line, ofp); - if (*key) - r = fputc ('\n', ofp); - done++; - } - } - else { - r = fputs (buf, ofp); - } - } - - while (r != EOF && fgets (buf, sizeof (buf), ifp)) - r = fputs (buf, ofp); - - /* If there wasn't a line to replace, put it on the end of the file */ - if (r != EOF && !done && line) { - fputs (line, ofp); - r = fputc ('\n', ofp); - } - mx_unlock_file (filename, fileno (ofp), 0); - fclose (ofp); - fclose (ifp); - if (r != EOF) { - unlink (oldfile); - return 0; - } - unlink (filename); - mutt_error (_("Cannot write new %s, old file saved as %s"), filename, - oldfile); - return (-1); -} - - void mutt_version (void) { - mutt_message ("Mutt-ng %s (%s) based on Mutt 1.5.9", MUTT_VERSION, ReleaseDate); + mutt_message (mutt_make_version()); } void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) @@ -942,7 +785,6 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) char buf[LONG_STRING]; char obuf[LONG_STRING]; char tmp[STRING]; - PARAMETER *p; char charset[STRING]; char *cp; @@ -950,18 +792,19 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) short charset_changed = 0; short type_changed = 0; - cp = mutt_get_parameter ("charset", b->parameter); - strfcpy (charset, NONULL (cp), sizeof (charset)); + cp = parameter_getval(b->parameter, "charset"); + m_strcpy(charset, sizeof(charset), NONULL(cp)); snprintf (buf, sizeof (buf), "%s/%s", TYPE (b), b->subtype); - strfcpy (obuf, buf, sizeof (obuf)); + m_strcpy(obuf, sizeof(obuf), buf); if (b->parameter) { - size_t l; + parameter_t *p; + ssize_t l; for (p = b->parameter; p; p = p->next) { - l = mutt_strlen (buf); + l = m_strlen(buf); - rfc822_cat (tmp, sizeof (tmp), p->value, MimeSpecials); + rfc822_strcpy(tmp, sizeof(tmp), p->value, MimeSpecials); snprintf (buf + l, sizeof (buf) - l, "; %s=%s", p->attribute, tmp); } } @@ -971,8 +814,8 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) return; /* clean up previous junk */ - mutt_free_parameter (&b->parameter); - FREE (&b->subtype); + parameter_list_wipe(&b->parameter); + p_delete(&b->subtype); mutt_parse_content_type (buf, b); @@ -980,7 +823,7 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) snprintf (tmp, sizeof (tmp), "%s/%s", TYPE (b), NONULL (b->subtype)); type_changed = ascii_strcasecmp (tmp, obuf); charset_changed = - ascii_strcasecmp (charset, mutt_get_parameter ("charset", b->parameter)); + ascii_strcasecmp (charset, parameter_getval(b->parameter, "charset")); /* if in send mode, check for conversion - current setting is default. */ @@ -988,7 +831,7 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) int r; snprintf (tmp, sizeof (tmp), _("Convert to %s upon sending?"), - mutt_get_parameter ("charset", b->parameter)); + parameter_getval(b->parameter, "charset")); if ((r = mutt_yesorno (tmp, !b->noconv)) != -1) b->noconv = (r == M_NO); } @@ -1002,23 +845,23 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp) if (type_changed) mutt_sleep (1); mutt_message (_("Character set changed to %s; %s."), - mutt_get_parameter ("charset", b->parameter), + parameter_getval(b->parameter, "charset"), b->noconv ? _("not converting") : _("converting")); } b->force_charset |= charset_changed ? 1 : 0; - if (!is_multipart (b) && b->parts) - mutt_free_body (&b->parts); - if (!mutt_is_message_type (b->type, b->subtype) && b->hdr) { + if (!is_multipart(b) && b->parts) + body_list_wipe(&b->parts); + if (!mutt_is_message_type(b) && b->hdr) { b->hdr->content = NULL; - mutt_free_header (&b->hdr); + header_delete(&b->hdr); } - if (fp && (is_multipart (b) || mutt_is_message_type (b->type, b->subtype))) + if (fp && (is_multipart(b) || mutt_is_message_type(b))) mutt_parse_part (fp, b); - if (WithCrypto && h) { + if (h) { if (h->content == b) h->security = 0;