X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mime%2Fmime.c;h=98237cf92544d16531eece93f2537a5467ef1f1f;hp=e9234490b965932d0a8b7c5826922385536539a4;hb=69f4685e616347559d4ec714fd826d7f97a472ef;hpb=2a2f2f9a5bad73c883b7f9c9b4166d932b6aaf37 diff --git a/lib-mime/mime.c b/lib-mime/mime.c index e923449..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[] = { @@ -52,7 +54,7 @@ const char *BodyEncodings[] = { /* rfc822 header parameters */ /****************************************************************************/ -char *parameter_getval(PARAMETER *parm, const char *s) +char *parameter_getval(parameter_t *parm, const char *s) { while (parm) { if (!ascii_strcasecmp(parm->attribute, s)) @@ -62,6 +64,72 @@ char *parameter_getval(PARAMETER *parm, const char *s) 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) +{ + 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); +} + + /****************************************************************************/ /* XXX */ /****************************************************************************/