X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mime%2Frfc822.c;h=e73b408124db66837f04b75c280808a153d7553e;hp=82c3e7ced6ab484e8446b0a4c33c77ee4610d1f7;hb=33d07d4040a973a004c4a729fd1f56a63a7203e6;hpb=ab12fea9d01b3b9bc53081ae4ccc046243f1cb9f diff --git a/lib-mime/rfc822.c b/lib-mime/rfc822.c index 82c3e7c..e73b408 100644 --- a/lib-mime/rfc822.c +++ b/lib-mime/rfc822.c @@ -37,6 +37,49 @@ #include "mutt_idna.h" +void address_wipe(address_t *addr) +{ + p_delete(&addr->personal); + p_delete(&addr->mailbox); + address_delete(&addr->next); +} + + +void rfc822_qualify(address_t *addr, const char *host) +{ + char *p; + + for (; addr; addr = addr->next) { + if (!addr->group && addr->mailbox && strchr(addr->mailbox, '@') == NULL) { + p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2); + sprintf(p, "%s@%s", addr->mailbox, host); /* __SPRINTF_CHECKED__ */ + p_delete(&addr->mailbox); + addr->mailbox = p; + } + } +} + +address_t *address_dup(address_t *addr) +{ + address_t *res = address_new(); + + res->personal = m_strdup(addr->personal); + res->mailbox = m_strdup(addr->mailbox); + res->group = addr->group; + return res; +} + +address_t *address_list_dup(address_t *addr) +{ + address_t *res = NULL, **resp = &res; + + for (; addr; addr = addr->next) { + *resp = address_dup(addr); + resp = &(*resp)->next; + } + + return res; +} #define terminate_string(a, b, c) do { if ((b) < (c)) a[(b)] = 0; else \ a[(c)] = 0; } while (0) @@ -79,19 +122,6 @@ void rfc822_dequote_comment (char *s) *w = 0; } -void rfc822_free_address (ADDRESS ** p) -{ - ADDRESS *t; - - while (*p) { - t = *p; - *p = (*p)->next; - p_delete(&t->personal); - p_delete(&t->mailbox); - p_delete(&t); - } -} - static const char *parse_comment (const char *s, char *comment, size_t * commentlen, size_t commentmax) @@ -202,7 +232,7 @@ static const char *parse_address (const char *s, char *token, size_t * tokenlen, size_t tokenmax, char *comment, size_t * commentlen, size_t commentmax, - ADDRESS * addr) + address_t * addr) { s = parse_mailboxdomain (s, ".\"(\\", token, tokenlen, tokenmax, @@ -233,7 +263,7 @@ static const char *parse_address (const char *s, static const char *parse_route_addr (const char *s, char *comment, size_t * commentlen, - size_t commentmax, ADDRESS * addr) + size_t commentmax, address_t * addr) { char token[STRING]; size_t tokenlen = 0; @@ -278,7 +308,7 @@ static const char *parse_route_addr (const char *s, static const char *parse_addr_spec (const char *s, char *comment, size_t * commentlen, - size_t commentmax, ADDRESS * addr) + size_t commentmax, address_t * addr) { char token[STRING]; size_t tokenlen = 0; @@ -294,13 +324,13 @@ static const char *parse_addr_spec (const char *s, } static void -add_addrspec (ADDRESS ** top, ADDRESS ** last, const char *phrase, +add_addrspec (address_t ** top, address_t ** last, const char *phrase, char *comment, size_t * commentlen, size_t commentmax) { - ADDRESS *cur = rfc822_new_address (); + address_t *cur = address_new (); if (parse_addr_spec (phrase, comment, commentlen, commentmax, cur) == NULL) { - rfc822_free_address (&cur); + address_delete (&cur); return; } @@ -311,13 +341,13 @@ add_addrspec (ADDRESS ** top, ADDRESS ** last, const char *phrase, *last = cur; } -ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) +address_t *rfc822_parse_adrlist (address_t * top, const char *s) { int ws_pending; const char *begin, *ps; char comment[STRING], phrase[STRING]; size_t phraselen = 0, commentlen = 0; - ADDRESS *cur, *last = NULL; + address_t *cur, *last = NULL; RFC822Error = 0; @@ -351,13 +381,13 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) if ((ps = next_token (s, comment, &commentlen, sizeof (comment) - 1)) == NULL) { - rfc822_free_address (&top); + address_delete (&top); return NULL; } s = ps; } else if (*s == ':') { - cur = rfc822_new_address (); + cur = address_new (); terminate_buffer (phrase, phraselen); cur->mailbox = m_strdup(phrase); cur->group = 1; @@ -385,7 +415,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) } /* add group terminator */ - cur = rfc822_new_address (); + cur = address_new (); if (last) { last->next = cur; last = cur; @@ -398,7 +428,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) } else if (*s == '<') { terminate_buffer (phrase, phraselen); - cur = rfc822_new_address (); + cur = address_new (); if (phraselen) { if (cur->personal) p_delete(&cur->personal); @@ -409,8 +439,8 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) if ((ps = parse_route_addr (s + 1, comment, &commentlen, sizeof (comment) - 1, cur)) == NULL) { - rfc822_free_address (&top); - rfc822_free_address (&cur); + address_delete (&top); + address_delete (&cur); return NULL; } @@ -429,7 +459,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) phrase[phraselen++] = ' '; if ((ps = next_token (s, phrase, &phraselen, sizeof (phrase) - 1)) == NULL) { - rfc822_free_address (&top); + address_delete (&top); return NULL; } s = ps; @@ -452,19 +482,6 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s) return top; } -void rfc822_qualify (ADDRESS * addr, const char *host) -{ - char *p; - - for (; addr; addr = addr->next) - if (!addr->group && addr->mailbox && strchr (addr->mailbox, '@') == NULL) { - p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2); - sprintf (p, "%s@%s", addr->mailbox, host); /* __SPRINTF_CHECKED__ */ - p_delete(&addr->mailbox); - addr->mailbox = p; - } -} - void rfc822_cat (char *buf, size_t buflen, const char *value, const char *specials) { @@ -489,7 +506,7 @@ rfc822_cat (char *buf, size_t buflen, const char *value, const char *specials) m_strcpy(buf, buflen, value); } -void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS * addr, +void rfc822_write_address_single (char *buf, size_t buflen, address_t * addr, int display) { size_t len; @@ -595,7 +612,7 @@ done: } /* note: it is assumed that `buf' is nul terminated! */ -void rfc822_write_address (char *buf, size_t buflen, ADDRESS * addr, +void rfc822_write_address (char *buf, size_t buflen, address_t * addr, int display) { char *pbuf = buf; @@ -647,47 +664,3 @@ done: *pbuf = 0; } -/* this should be rfc822_cpy_adr */ -ADDRESS *rfc822_cpy_adr_real (ADDRESS * addr) -{ - ADDRESS *p = rfc822_new_address (); - - p->personal = m_strdup(addr->personal); - p->mailbox = m_strdup(addr->mailbox); - p->group = addr->group; - return p; -} - -/* this should be rfc822_cpy_adrlist */ -ADDRESS *rfc822_cpy_adr (ADDRESS * addr) -{ - ADDRESS *top = NULL, *last = NULL; - - for (; addr; addr = addr->next) { - if (last) { - last->next = rfc822_cpy_adr_real (addr); - last = last->next; - } - else - top = last = rfc822_cpy_adr_real (addr); - } - return top; -} - -/* append list 'b' to list 'a' and return the last element in the new list */ -ADDRESS *rfc822_append (ADDRESS ** a, ADDRESS * b) -{ - ADDRESS *tmp = *a; - - while (tmp && tmp->next) - tmp = tmp->next; - if (!b) - return tmp; - if (tmp) - tmp->next = rfc822_cpy_adr (b); - else - tmp = *a = rfc822_cpy_adr (b); - while (tmp && tmp->next) - tmp = tmp->next; - return tmp; -}