m->length = st.st_size;
m->encoding = ENC8BIT;
m->offset = 0;
- if (mutt_is_message_type(m->type, m->subtype))
- {
- saved_parts = m->parts;
- saved_hdr = m->hdr;
- m->parts = mutt_parse_messageRFC822 (s.fpin, m);
- }
+ saved_parts = m->parts;
+ saved_hdr = m->hdr;
+ mutt_parse_part (s.fpin, m);
}
else
s.fpin = fp;
return (p);
}
+void mutt_parse_part (FILE *fp, BODY *b)
+{
+ switch (b->type)
+ {
+ case TYPEMULTIPART:
+ fseek (fp, b->offset, SEEK_SET);
+ b->parts = mutt_parse_multipart (fp, mutt_get_parameter ("boundary", b->parameter),
+ b->offset + b->length,
+ mutt_strcasecmp ("digest", b->subtype) == 0);
+ break;
+
+ case TYPEMESSAGE:
+ if (b->subtype)
+ {
+ fseek (fp, b->offset, SEEK_SET);
+ if (mutt_is_message_type(b))
+ b->parts = mutt_parse_messageRFC822 (fp, b);
+ else if (mutt_strcasecmp (b->subtype, "external-body") == 0)
+ b->parts = mutt_read_mime_header (fp, 0);
+ }
+ break;
+ }
+}
+
/* parse a MESSAGE/RFC822 body
*
* args:
last->length = end_off - last->offset;
/* parse recursive MIME parts */
- for (last = head; last; last = last->next)
- {
- switch (last->type)
- {
- case TYPEMULTIPART:
- fseek (fp, last->offset, 0);
- last->parts = mutt_parse_multipart (fp, mutt_get_parameter ("boundary", last->parameter), last->offset + last->length, mutt_strcasecmp ("digest", last->subtype) == 0);
- break;
-
- case TYPEMESSAGE:
- if (last->subtype)
- {
- fseek (fp, last->offset, SEEK_SET);
- if (mutt_strcasecmp (last->subtype, "rfc822") == 0 ||
- mutt_strcasecmp (last->subtype, "news") == 0)
- last->parts = mutt_parse_messageRFC822 (fp, last);
- else if (mutt_strcasecmp (last->subtype, "external-body") == 0)
- last->parts = mutt_read_mime_header (fp, 0);
- }
- break;
- }
- }
-
+ for(last = head; last; last = last->next)
+ mutt_parse_part(fp, last);
+
return (head);
}
void mutt_nocurses_error (const char *, ...);
void mutt_normalize_time (struct tm *);
void mutt_parse_mime_message (CONTEXT *ctx, HEADER *);
+void mutt_parse_part (FILE *, BODY *);
void mutt_pipe_message_to_state (HEADER *, STATE *);
void mutt_perror (const char *);
void mutt_prepare_envelope (ENVELOPE *);