parse_content_type (c, p);
mutt_parse_content_type (c, p);
BODY *mutt_read_mime_header (FILE *fp, int digest){  BODY *p = mutt_new_body();  char *c;  char *line = safe_malloc (LONG_STRING);  size_t linelen = LONG_STRING;    p->hdr_offset = ftell(fp);  p->encoding = ENC7BIT; /* default from RFC1521 */  p->type = digest ? TYPEMESSAGE : TYPETEXT;  while (*(line = read_rfc822_line (fp, line, &linelen)) != 0)  {    /* Find the value of the current header */    if ((c = strchr (line, ':')))    {      *c = 0;      c++;      SKIPWS (c);      if (!*c)      {	dprint (1, (debugfile, "mutt_read_mime_header(): skipping empty header field: %s\n", line));	continue;      }    }    else    {      dprint (1, (debugfile, "read_mime_header: bogus MIME header: %s\n", line));      break;    }    if (!mutt_strncasecmp ("content-", line, 8))    {      if (!mutt_strcasecmp ("type", line + 8))	parse_content_type (c, p);      else if (!mutt_strcasecmp ("transfer-encoding", line + 8))	p->encoding = mutt_check_encoding (c);      else if (!mutt_strcasecmp ("disposition", line + 8))	parse_content_disposition (c, p);      else if (!mutt_strcasecmp ("description", line + 8))      {	safe_free ((void **) &p->description);	p->description = safe_strdup (c);	rfc2047_decode (p->description, p->description, mutt_strlen (p->description) + 1);      }    }  }  p->offset = ftell (fp); /* Mark the start of the real data */  if (p->type == TYPETEXT && !p->subtype)    p->subtype = safe_strdup ("plain");  else if (p->type == TYPEMESSAGE && !p->subtype)    p->subtype = safe_strdup ("rfc822");  FREE (&line);  return (p);}