* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-
-#include <lib-lib/mem.h>
-#include <lib-lib/ascii.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/file.h>
+#include <lib-lib/lib-lib.h>
#include <lib-mime/mime.h>
#include <lib-mime/rfc3676.h>
#include <lib-ui/curses.h>
+#include <lib-sys/unix.h>
+
#include "mutt.h"
#include "recvattach.h"
#include "handler.h"
*
*/
-void mutt_decode_quoted (STATE * s, long len, int istext, iconv_t cd)
+static void mutt_decode_quoted (STATE * s, long len, int istext, iconv_t cd)
{
char line[STRING];
char decline[2 * STRING];
state_reset_prefix (s);
}
-unsigned char decode_byte (char ch)
+static unsigned char decode_byte (char ch)
{
if (ch == 96)
return 0;
return ch - 32;
}
-void mutt_decode_uuencoded (STATE * s, long len, int istext, iconv_t cd)
+static void mutt_decode_uuencoded (STATE * s, long len, int istext, iconv_t cd)
{
char tmps[SHORT_STRING];
char linelen, c, l, out;
stte->line_max = stte->line_used;
p_realloc(&stte->line, stte->line_max + 1);
}
- strcat (stte->line, stte->buffer); /* __STRCAT_CHECKED__ */
+ m_strcat(stte->line, stte->line_max + 1, stte->buffer);
stte->line_len += stte->word_len;
stte->word_len = 0;
stte->buff_used = 0;
}
}
-int text_enriched_handler (BODY * a, STATE * s)
+static int text_enriched_handler (BODY * a, STATE * s)
{
enum {
TEXT, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE
mustfree = 1;
fstat (fileno (s->fpin), &st);
- b = mutt_new_body ();
+ b = body_new();
b->length = (long) st.st_size;
- b->parts = mutt_parse_multipart (s->fpin,
- mutt_get_parameter ("boundary",
- a->parameter),
- (long) st.st_size,
- ascii_strcasecmp ("digest",
- a->subtype) == 0);
+ b->parts = mutt_parse_multipart(s->fpin,
+ parameter_getval(a->parameter, "boundary"),
+ (long)st.st_size,
+ !ascii_strcasecmp("digest", a->subtype));
}
else
b = a;
}
if (mustfree)
- mutt_free_body (&a);
+ body_list_wipe(&a);
return (rc);
}
if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
a->encoding == ENCUUENCODED) {
fstat (fileno (s->fpin), &st);
- b = mutt_new_body ();
+ b = body_new();
b->length = (long) st.st_size;
b->parts = mutt_parse_messageRFC822 (s->fpin, b);
}
if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
a->encoding == ENCUUENCODED)
- mutt_free_body (&b);
+ body_list_wipe(&b);
return (rc);
}
if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
a->encoding == ENCUUENCODED) {
fstat (fileno (s->fpin), &st);
- b = mutt_new_body ();
+ b = body_new();
b->length = (long) st.st_size;
- b->parts = mutt_parse_multipart (s->fpin,
- mutt_get_parameter ("boundary",
- a->parameter),
- (long) st.st_size,
- ascii_strcasecmp ("digest",
- a->subtype) == 0);
+ b->parts = mutt_parse_multipart(s->fpin,
+ parameter_getval(a->parameter, "boundary"),
+ (long)st.st_size,
+ !ascii_strcasecmp("digest", a->subtype));
}
else
b = a;
if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
a->encoding == ENCUUENCODED)
- mutt_free_body (&b);
+ body_list_wipe(&b);
return (rc);
}
mutt_copy_bytes (s->fpin, fpin, a->length);
if (!piped) {
- safe_fclose (&fpin);
+ m_fclose(&fpin);
thepid = mutt_create_filter (command, NULL, &fpout, &fperr);
}
else {
}
bail:
- safe_fclose (&fpout);
- safe_fclose (&fperr);
+ m_fclose(&fpout);
+ m_fclose(&fperr);
mutt_wait_filter (thepid);
if (piped)
- safe_fclose (&fpin);
+ m_fclose(&fpin);
else
mutt_unlink (tempfile);
const char *expiration;
time_t expire;
- access_type = mutt_get_parameter ("access-type", b->parameter);
+ access_type = parameter_getval(b->parameter, "access-type");
if (!access_type) {
if (s->flags & M_DISPLAY) {
state_mark_attach (s);
return (-1);
}
- expiration = mutt_get_parameter ("expiration", b->parameter);
+ expiration = parameter_getval(b->parameter, "expiration");
if (expiration)
expire = mutt_parse_date (expiration, NULL);
else
state_mark_attach (s);
state_printf (s, _("[-- This %s/%s attachment "),
TYPE (b->parts), b->parts->subtype);
- length = mutt_get_parameter ("length", b->parameter);
+ length = parameter_getval(b->parameter, "length");
if (length) {
mutt_pretty_size (pretty_size, sizeof (pretty_size),
strtol (length, NULL, 10));
void mutt_decode_attachment (BODY * b, STATE * s)
{
int istext = mutt_is_text_part (b);
- iconv_t cd = (iconv_t) (-1);
+ iconv_t cd = MUTT_ICONV_ERROR;
Quotebuf[0] = '\0';
if (istext) {
if (s->flags & M_CHARCONV) {
- const char *charset = mutt_get_parameter ("charset", b->parameter);
+ const char *charset = parameter_getval(b->parameter, "charset");
- if (!option (OPTSTRICTMIME) && !charset)
- charset = mutt_get_first_charset (AssumedCharset);
+ if (!charset)
+ charset = charset_getfirst(AssumedCharset);
if (charset && Charset)
cd = mutt_iconv_open (Charset, charset, M_ICONV_HOOK_FROM);
- }
- else {
+ } else {
if (b->file_charset)
cd = mutt_iconv_open (Charset, b->file_charset, M_ICONV_HOOK_FROM);
}
break;
}
- if (cd != (iconv_t) (-1))
+ if (cd != MUTT_ICONV_ERROR)
iconv_close (cd);
}
if (mutt_is_application_pgp (b))
handler = crypt_pgp_application_pgp_handler;
else
- if (ascii_strcasecmp
- ("flowed", mutt_get_parameter ("format", b->parameter)) == 0)
- handler = rfc3676_handler;
+ if (!ascii_strcasecmp("flowed", parameter_getval(b->parameter, "format")))
+ handler = rfc3676_handler;
else
plaintext = 1;
}
plaintext = 1;
}
else if (b->type == TYPEMESSAGE) {
- if (mutt_is_message_type (b->type, b->subtype))
+ if (mutt_is_message_type (b))
handler = message_handler;
else if (!ascii_strcasecmp ("delivery-status", b->subtype))
plaintext = 1;
if (ascii_strcasecmp ("alternative", b->subtype) == 0)
handler = alternative_handler;
else if (ascii_strcasecmp ("signed", b->subtype) == 0) {
- p = mutt_get_parameter ("protocol", b->parameter);
+ p = parameter_getval(b->parameter, "protocol");
if (!p)
mutt_error (_("Error: multipart/signed has no protocol."));
handler = mutt_signed_handler;
}
else if (m_strcasecmp("encrypted", b->subtype) == 0) {
- p = mutt_get_parameter ("protocol", b->parameter);
+ p = parameter_getval(b->parameter, "protocol");
if (!p)
mutt_error (_
if (!plaintext) {
/* decode to a tempfile, saving the original destination */
fp = s->fpout;
- mutt_mktemp (tempfile);
- if ((s->fpout = safe_fopen (tempfile, "w")) == NULL) {
+ s->fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL);
+ if (!s->fpout) {
mutt_error _("Unable to open temporary file!");
-
goto bail;
}
/* decoding the attachment changes the size and offset, so save a copy
s->prefix = NULL;
decode = 1;
- }
- else
+ } else {
b->type = TYPETEXT;
+ }
mutt_decode_attachment (b, s);
if (decode) {
b->length = ftello (s->fpout);
b->offset = 0;
- fclose (s->fpout);
+ m_fclose(&s->fpout);
/* restore final destination and substitute the tempfile for input */
s->fpout = fp;
b->offset = tmpoffset;
/* restore the original source stream */
- fclose (s->fpin);
+ m_fclose(&s->fpin);
s->fpin = fp;
}
}