X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mime%2Fmime.c;h=8f10d561bfccbd224148a9c1c8ffa7b5f4287602;hp=98237cf92544d16531eece93f2537a5467ef1f1f;hb=16534e98723674fa391e3fc29d2a07ce419c13dd;hpb=69f4685e616347559d4ec714fd826d7f97a472ef diff --git a/lib-mime/mime.c b/lib-mime/mime.c index 98237cf..8f10d56 100644 --- a/lib-mime/mime.c +++ b/lib-mime/mime.c @@ -16,13 +16,15 @@ * * Copyright © 2006 Pierre Habouzit */ +/* + * Copyright notice from original mutt: + * Copyright (C) 1996-2000 Michael R. Elkins + * Copyright (C) 1999-2000 Thomas Roessler + */ -#include -#include - -#include "mime-types.h" +#include -#include "mutt.h" +#include "mime.h" #define BOUNDARYLEN 16 @@ -134,18 +136,6 @@ void parameter_set_boundary(parameter_t **parm) /* XXX */ /****************************************************************************/ -void rfc1524_entry_wipe(rfc1524_entry *p) -{ - p_delete(&p->command); - p_delete(&p->testcommand); - p_delete(&p->composecommand); - p_delete(&p->composetypecommand); - p_delete(&p->editcommand); - p_delete(&p->printcommand); - p_delete(&p->nametemplate); - p_delete(&p->convert); -} - void envelope_wipe(ENVELOPE *p) { address_list_wipe(&p->return_path); @@ -178,76 +168,78 @@ void envelope_wipe(ENVELOPE *p) string_list_wipe(&p->userhdrs); } +void body_wipe(BODY *b) +{ + if (b->parameter) + parameter_list_wipe(&b->parameter); + + if (b->unlink && b->filename) { + unlink (b->filename); + } + + p_delete(&b->filename); + p_delete(&b->content); + p_delete(&b->xtype); + p_delete(&b->subtype); + p_delete(&b->description); + p_delete(&b->form_name); + + if (b->hdr) { + /* Don't free twice (b->hdr->content = b->parts) */ + b->hdr->content = NULL; + header_delete(&b->hdr); + } + + if (b->parts) + body_list_wipe(&b->parts); +} + void header_wipe(HEADER *h) { envelope_delete(&h->env); - mutt_free_body (&h->content); + body_list_wipe(&h->content); p_delete(&h->maildir_flags); p_delete(&h->tree); p_delete(&h->path); -#ifdef MIXMASTER string_list_wipe(&h->chain); -#endif p_delete(&h->data); } -int url_parse_mailto(ENVELOPE *e, char **body, const char *src) -{ - char *t; - char *tmp; - char *headers; - char *tag, *value; - char scratch[HUGE_STRING]; - int taglen; +/****************************************************************************/ +/* misc functions */ +/****************************************************************************/ - string_list_t **last = &e->userhdrs; +int mutt_is_message_type(BODY *b) +{ + int tok; - if (!(t = strchr (src, ':'))) - return -1; + if (b->type != TYPEMESSAGE) + return 0; - if ((tmp = m_strdup(t + 1)) == NULL) - return -1; + tok = mime_which_token(b->subtype, -1); + return tok == MIME_RFC822 || tok == MIME_NEWS; +} - if ((headers = strchr (tmp, '?'))) - *headers++ = '\0'; +int mutt_is_text_part(BODY * b) +{ + char *s = b->subtype; - url_decode(tmp); - e->to = rfc822_parse_adrlist (e->to, tmp); + if (mutt_is_application_pgp(b)) + return 0; - tag = headers ? strtok (headers, "&") : NULL; + switch (b->type) { + case TYPETEXT: + return 1; - for (; tag; tag = strtok (NULL, "&")) { - if ((value = strchr (tag, '='))) - *value++ = '\0'; - if (!value || !*value) - continue; + case TYPEMESSAGE: + return mime_which_token(s, -1) == MIME_DELIVERY_STATUS; - url_decode (tag); - url_decode (value); + case TYPEAPPLICATION: + return mime_which_token(s, -1) == MIME_PGP_KEYS; - if (!ascii_strcasecmp (tag, "body")) { - if (body) - m_strreplace(body, value); - } - else { -#define SAFEPFX (option (OPTSTRICTMAILTO) ? "" : "X-Mailto-") - taglen = m_strlen(tag) + m_strlen(SAFEPFX); - /* mutt_parse_rfc822_line makes some assumptions */ - snprintf (scratch, sizeof (scratch), "%s%s: %s", SAFEPFX, tag, value); -#undef SAVEPFX - scratch[taglen] = '\0'; - value = vskipspaces(&scratch[taglen + 1]); - last = mutt_parse_rfc822_line (e, NULL, scratch, value, 0, 0, last); - /* if $strict_mailto is set, force editing headers to let - * users have a look at what we got */ - if (!option (OPTSTRICTMAILTO)) { - set_option (OPTXMAILTO); - set_option (OPTEDITHDRS); - } - } + default: + return 0; } - - p_delete(&tmp); - return 0; } +