* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/file.h>
-#include <lib-lib/mapping.h>
+#include <lib-lib/lib-lib.h>
#include <lib-mime/mime.h>
+#include <lib-ui/curses.h>
+#include <lib-ui/enter.h>
+#include <lib-ui/menu.h>
+#include <lib-mx/mx.h>
+
#include "mutt.h"
-#include "enter.h"
+#include "alias.h"
#include "state.h"
#include "handler.h"
#include "recvattach.h"
-#include "mutt_curses.h"
-#include "mutt_menu.h"
-#include "rfc1524.h"
#include "attach.h"
-#include "mx.h"
#include "copy.h"
#include "mutt_idna.h"
static short check_msg (BODY * b, short err)
{
- if (!mutt_is_message_type (b->type, b->subtype)) {
+ if (!mutt_is_message_type(b)) {
if (err)
mutt_error _("You may only bounce message/rfc822 parts.");
/**
- **
** The bounce function, from the attachment menu
- **
**/
-void mutt_attach_bounce (FILE * fp, HEADER * hdr,
+void mutt_attach_bounce (FILE * fp, HEADER * hdr __attribute__ ((unused)),
ATTACHPTR ** idx, short idxlen, BODY * cur)
{
short i;
if (mutt_addrlist_to_idna (adr, &err) < 0) {
mutt_error (_("Bad IDN: '%s'"), err);
p_delete(&err);
- address_delete (&adr);
+ 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)
/*
* See commands.c.
*/
(p ? _("Bounce message to %s") : _("Bounce messages to %s")),
buf);
- if (mutt_strwidth (prompt) > COLS - extra_space) {
+#define extra_space (15+7+2)
+ if (m_strwidth(prompt) > COLS - extra_space) {
mutt_format_string (prompt, sizeof (prompt) - 4,
0, COLS - extra_space, 0, 0,
prompt, sizeof (prompt), 0);
} else {
m_strcat(prompt, sizeof(prompt), "?");
}
+#undef extra_space
if (query_quadoption (OPT_BOUNCE, prompt) != M_YES) {
- address_delete (&adr);
+ address_list_wipe(&adr);
CLEARLINE (LINES - 1);
mutt_message (p ? _("Message not bounced.") : _("Messages not bounced."));
return;
/**
- **
** resend-message, from the attachment menu
- **
- **
**/
-void mutt_attach_resend (FILE * fp, HEADER * hdr, ATTACHPTR ** idx,
+void mutt_attach_resend (FILE * fp, HEADER * hdr __attribute__ ((unused)), ATTACHPTR ** idx,
short idxlen, BODY * cur)
{
short i;
\f
/**
- **
** forward-message, from the attachment menu
- **
**/
/* try to find a common parent message for the tagged attachments. */
break;
while (--i >= 0) {
- if (mutt_is_message_type
- (idx[i]->content->type, idx[i]->content->subtype)) {
+ if (mutt_is_message_type(idx[i]->content)) {
nchildren = count_tagged_children (idx, idxlen, i);
if (nchildren == nattach)
return idx[i]->content->hdr;
if (cur) {
for (i = 0; i < idxlen; i++) {
- if (mutt_is_message_type
- (idx[i]->content->type, idx[i]->content->subtype)
+ if (mutt_is_message_type(idx[i]->content)
&& is_parent (i, idx, idxlen, cur))
parent = idx[i]->content->hdr;
if (idx[i]->content == cur)
HEADER * hdr, FILE * ofp, char *_prefix)
{
int chflags = CH_DECODE;
- char prefix[SHORT_STRING];
+ char prefix[STRING];
if (option (OPTWEED))
chflags |= CH_WEED | CH_REORDER;
mutt_copy_header (ifp, hdr, ofp, chflags, quote ? prefix : NULL);
}
+/* create a send-mode duplicate from a receive-mode body */
+static int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src)
+{
+ char tmp[_POSIX_PATH_MAX];
+ BODY *b;
+
+ parameter_t *par, **ppar;
+
+ short use_disp;
+
+ if (src->filename) {
+ use_disp = 1;
+ m_strcpy(tmp, sizeof(tmp), src->filename);
+ } else {
+ use_disp = 0;
+ tmp[0] = '\0';
+ }
+
+ mutt_adv_mktemp (NULL, tmp, sizeof (tmp));
+ if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1)
+ return -1;
+
+ *tgt = body_new();
+ b = *tgt;
+
+ memcpy (b, src, sizeof (BODY));
+ b->parts = NULL;
+ b->next = NULL;
+
+ b->filename = m_strdup(tmp);
+ b->use_disp = use_disp;
+ b->unlink = 1;
+
+ if (mutt_is_text_part (b))
+ b->noconv = 1;
+
+ b->xtype = m_strdup(b->xtype);
+ b->subtype = m_strdup(b->subtype);
+ b->form_name = m_strdup(b->form_name);
+ b->filename = m_strdup(b->filename);
+ b->d_filename = m_strdup(b->d_filename);
+ b->description = m_strdup(b->description);
+
+ /*
+ * we don't seem to need the HEADER structure currently.
+ * XXX - this may change in the future
+ */
+
+ if (b->hdr)
+ b->hdr = NULL;
+
+ /* copy parameters */
+ for (par = b->parameter, ppar = &b->parameter; par;
+ ppar = &(*ppar)->next, par = par->next) {
+ *ppar = parameter_new();
+ (*ppar)->attribute = m_strdup(par->attribute);
+ (*ppar)->value = m_strdup(par->value);
+ }
+
+ mutt_stamp_attachment (b);
+
+ return 0;
+}
+
/* Attach all the body parts which can't be decoded.
* This code is shared by forwarding and replying. */
parent = hdr;
- tmphdr = mutt_new_header ();
- tmphdr->env = mutt_new_envelope ();
+ tmphdr = header_new();
+ tmphdr->env = envelope_new();
mutt_make_forward_subject (tmphdr->env, Context, parent);
- mutt_mktemp (tmpbody);
- if ((tmpfp = safe_fopen (tmpbody, "w")) == NULL) {
- mutt_error (_("Can't open temporary file %s."), tmpbody);
+ tmpfp = m_tempfile(tmpbody, sizeof(tmpbody), NONULL(mod_core.tmpdir), NULL);
+ if (!tmpfp) {
+ mutt_error(_("Could not create temporary file"));
return;
}
}
mutt_forward_trailer (tmpfp);
-
- fclose (tmpfp);
- tmpfp = NULL;
+ m_fclose(&tmpfp);
/* now that we have the template, send it. */
ci_send_message (flags, tmphdr, tmpbody, NULL, parent);
return;
bail:
-
- if (tmpfp) {
- fclose (tmpfp);
- mutt_unlink (tmpbody);
- }
-
- mutt_free_header (&tmphdr);
+ m_fclose(&tmpfp);
+ mutt_unlink(tmpbody);
+ header_delete(&tmphdr);
}
* the attachment index.
*/
-static void attach_forward_msgs (FILE * fp, HEADER * hdr,
+static void attach_forward_msgs (FILE * fp, HEADER * hdr __attribute__ ((unused)),
ATTACHPTR ** idx, short idxlen, BODY * cur,
int flags)
{
}
}
- tmphdr = mutt_new_header ();
- tmphdr->env = mutt_new_envelope ();
+ tmphdr = header_new();
+ tmphdr->env = envelope_new();
mutt_make_forward_subject (tmphdr->env, Context, curhdr);
/* no MIME encapsulation */
- mutt_mktemp (tmpbody);
- if (!(tmpfp = safe_fopen (tmpbody, "w"))) {
- mutt_error (_("Can't create %s."), tmpbody);
- mutt_free_header (&tmphdr);
+ tmpfp = m_tempfile(tmpbody, sizeof(tmpbody), NONULL(mod_core.tmpdir), NULL);
+ if (!tmpfp) {
+ mutt_error(_("Could not create temporary file"));
+ header_delete(&tmphdr);
return;
}
}
}
}
- fclose (tmpfp);
+ m_fclose(&tmpfp);
}
else if (rc == M_YES) { /* do MIME encapsulation - we don't need to do much here */
last = &tmphdr->content;
}
}
else
- mutt_free_header (&tmphdr);
+ header_delete(&tmphdr);
ci_send_message (flags, tmphdr, *tmpbody ? tmpbody : NULL, NULL, curhdr);
/**
- **
** the various reply functions, from the attachment menu
- **
- **
**/
/* Create the envelope defaults for a reply.
if (parent)
mutt_add_to_reference_headers (env, curenv, NULL, NULL);
else {
- LIST **p = NULL, **q = NULL;
+ string_list_t **p = NULL, **q = NULL;
for (i = 0; i < idxlen; i++) {
if (idx[i]->content->tagged)
/* This is _very_ similar to send.c's include_reply(). */
static void attach_include_reply (FILE * fp, FILE * tmpfp, HEADER * cur,
- int flags)
+ int flags __attribute__ ((unused)))
{
int cmflags = M_CM_PREFIX | M_CM_DECODE | M_CM_CHARCONV;
int chflags = CH_DECODE;
}
_mutt_copy_message (tmpfp, fp, cur, cur->content, cmflags, chflags);
- mutt_make_post_indent (Context, cur, tmpfp);
}
void mutt_attach_reply (FILE * fp, HEADER * hdr,
char tmpbody[_POSIX_PATH_MAX];
FILE *tmpfp;
- char prefix[SHORT_STRING];
+ char prefix[STRING];
int rc;
#ifdef USE_NNTP
else if (nattach == 1)
mime_reply_any = 1;
- tmphdr = mutt_new_header ();
- tmphdr->env = mutt_new_envelope ();
+ tmphdr = header_new();
+ tmphdr->env = envelope_new();
if (attach_reply_envelope_defaults (tmphdr->env, idx, idxlen,
parent ? parent : (cur ? cur->
hdr : NULL),
flags) == -1) {
- mutt_free_header (&tmphdr);
+ header_delete(&tmphdr);
return;
}
- mutt_mktemp (tmpbody);
- if ((tmpfp = safe_fopen (tmpbody, "w")) == NULL) {
- mutt_error (_("Can't create %s."), tmpbody);
- mutt_free_header (&tmphdr);
+ tmpfp = m_tempfile(tmpbody, sizeof(tmpbody), NONULL(mod_core.tmpdir), NULL);
+ if (!tmpfp) {
+ mutt_error(_("Could not create temporary file"));
+ header_delete(&tmphdr);
return;
}
}
}
- mutt_make_post_indent (Context, parent, tmpfp);
-
if (mime_reply_any && !cur &&
copy_problematic_attachments (fp, &tmphdr->content, idx, idxlen,
0) == NULL) {
- mutt_free_header (&tmphdr);
- fclose (tmpfp);
+ header_delete(&tmphdr);
+ m_fclose(&tmpfp);
return;
}
}
- fclose (tmpfp);
+ m_fclose(&tmpfp);
if (ci_send_message (flags, tmphdr, tmpbody, NULL, parent) == 0)
mutt_set_flag (Context, hdr, M_REPLIED, 1);