/*
* Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
- * Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.org>
+ * Copyright (C) 2000-4,2006 Thomas Roessler <roessler@does-not-exist.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
res = mutt_copy_message (fpout, Context, cur, cmflags,
- (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | CH_DECODE | CH_FROM);
- if ((safe_fclose (&fpout) != 0 && errno != EPIPE) || res == -1)
+ (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | CH_DECODE | CH_FROM | CH_DISPLAY);
+ if ((safe_fclose (&fpout) != 0 && errno != EPIPE) || res < 0)
{
mutt_error (_("Could not copy message"));
if (fpfilterout != NULL)
char *err = NULL;
int rc;
+ /* RfC 5322 mandates a From: header, so warn before bouncing
+ * messages without one */
+ if (h)
+ {
+ if (!h->env->from)
+ {
+ mutt_error _("Warning: message has no From: header");
+ mutt_sleep (2);
+ }
+ }
+ else if (Context)
+ {
+ for (rc = 0; rc < Context->msgcount; rc++)
+ {
+ if (Context->hdrs[rc]->tagged && !Context->hdrs[rc]->env->from)
+ {
+ mutt_error ("Warning: message has no From: header");
+ mutt_sleep (2);
+ break;
+ }
+ }
+ }
+
if(h)
strfcpy(prompt, _("Bounce message to: "), sizeof(prompt));
else
}
pipe_msg (h, fpout, decode, print);
- fclose (fpout);
+ safe_fclose (&fpout);
rc = mutt_wait_filter (thepid);
}
else
char prompt[SHORT_STRING], buf[_POSIX_PATH_MAX];
CONTEXT ctx;
struct stat st;
- BUFFY *tmp = NULL;
- struct utimbuf ut;
*redraw = 0;
}
}
- mutt_pretty_mailbox (buf);
+ mutt_pretty_mailbox (buf, sizeof (buf));
if (mutt_enter_fname (prompt, buf, sizeof (buf), redraw, 0) == -1)
return (-1);
mx_close_mailbox (&ctx, NULL);
if (need_buffy_cleanup)
- {
- if (option(OPTCHECKMBOXSIZE))
- {
- tmp = mutt_find_mailbox (buf);
- if (tmp && !tmp->new)
- mutt_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
- utime (buf, NULL);
- }
- }
+ mutt_buffy_cleanup (ctx.path, &st);
mutt_clear_error ();
return (0);