X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mime%2Fmime.c;h=98237cf92544d16531eece93f2537a5467ef1f1f;hp=fdb29356d7428175bcb5f84b2f9583d46cd58f04;hb=69f4685e616347559d4ec714fd826d7f97a472ef;hpb=3e9a92ab72e04aecb0fc4098098a1b57c5101d84 diff --git a/lib-mime/mime.c b/lib-mime/mime.c index fdb2935..98237cf 100644 --- a/lib-mime/mime.c +++ b/lib-mime/mime.c @@ -24,6 +24,8 @@ #include "mutt.h" +#define BOUNDARYLEN 16 + const char MimeSpecials[] = "@.,;:<>[]\\\"()?/= \t"; const char *BodyTypes[] = { @@ -48,30 +50,112 @@ const char *BodyEncodings[] = { "x-uuencoded", }; -void address_wipe(address_t *addr) +/****************************************************************************/ +/* rfc822 header parameters */ +/****************************************************************************/ + +char *parameter_getval(parameter_t *parm, const char *s) +{ + while (parm) { + if (!ascii_strcasecmp(parm->attribute, s)) + return parm->value; + parm = parm->next; + } + return NULL; +} + +void parameter_setval(parameter_t **p, const char *attribute, const char *value) +{ + while (*p) { + if (!ascii_strcasecmp(attribute, (*p)->attribute)) { + if (value) { + m_strreplace(&(*p)->value, value); + } else { + parameter_t *q = parameter_list_pop(p); + parameter_delete(&q); + } + return; + } + p = &(*p)->next; + } + + if (value) { + (*p) = parameter_new(); + (*p)->attribute = m_strdup(attribute); + (*p)->value = m_strdup(value); + } +} + +void parameter_delval(parameter_t **p, const char *attribute) +{ + while (*p) { + if (!ascii_strcasecmp(attribute, (*p)->attribute)) { + parameter_t *q = parameter_list_pop(p); + parameter_delete(&q); + return; + } + + p = &(*p)->next; + } +} + +int parameter_equal(const parameter_t *p1, const parameter_t *p2) +{ + while (p1 && p2) { + if (m_strcmp(p1->attribute, p2->attribute) + || m_strcmp(p1->value, p2->value)) + return 0; + + p1 = p1->next; + p2 = p2->next; + } + + if (p1 || p2) + return 0; + + return 1; +} + +void parameter_set_boundary(parameter_t **parm) { - p_delete(&addr->personal); - p_delete(&addr->mailbox); - address_delete(&addr->next); + char rs[BOUNDARYLEN + 1]; + int i; + + for (i = 0; i < BOUNDARYLEN; i++) { + rs[i] = __m_b64chars[lrand48() % sizeof(__m_b64chars)]; + } + rs[BOUNDARYLEN] = '\0'; + + parameter_setval(parm, "boundary", rs); } -void parameter_wipe(PARAMETER *param) + +/****************************************************************************/ +/* XXX */ +/****************************************************************************/ + +void rfc1524_entry_wipe(rfc1524_entry *p) { - p_delete(¶m->attribute); - p_delete(¶m->value); - parameter_delete(¶m->next); + 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_delete(&p->return_path); - address_delete(&p->from); - address_delete(&p->to); - address_delete(&p->cc); - address_delete(&p->bcc); - address_delete(&p->sender); - address_delete(&p->reply_to); - address_delete(&p->mail_followup_to); + address_list_wipe(&p->return_path); + address_list_wipe(&p->from); + address_list_wipe(&p->to); + address_list_wipe(&p->cc); + address_list_wipe(&p->bcc); + address_list_wipe(&p->sender); + address_list_wipe(&p->reply_to); + address_list_wipe(&p->mail_followup_to); p_delete(&p->list_post); p_delete(&p->subject); @@ -89,9 +173,9 @@ void envelope_wipe(ENVELOPE *p) #endif mutt_buffer_free (&p->spam); - mutt_free_list(&p->references); - mutt_free_list(&p->in_reply_to); - mutt_free_list(&p->userhdrs); + string_list_wipe(&p->references); + string_list_wipe(&p->in_reply_to); + string_list_wipe(&p->userhdrs); } void header_wipe(HEADER *h) @@ -102,7 +186,7 @@ void header_wipe(HEADER *h) p_delete(&h->tree); p_delete(&h->path); #ifdef MIXMASTER - mutt_free_list(&h->chain); + string_list_wipe(&h->chain); #endif p_delete(&h->data); } @@ -117,7 +201,7 @@ int url_parse_mailto(ENVELOPE *e, char **body, const char *src) int taglen; - LIST **last = &e->userhdrs; + string_list_t **last = &e->userhdrs; if (!(t = strchr (src, ':'))) return -1;