X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mime%2Frfc822address.c;h=c6b12ab7d750927025ff707a81fbdc06cda94179;hp=190588c5e6aa67ea447cd1845795fd4b9a888021;hb=98533911b5d5279b6f4574c66f77fbd6c772ac6f;hpb=f3cbb9f51357972f6e74244494236a41dc4d84cd diff --git a/lib-mime/rfc822address.c b/lib-mime/rfc822address.c index 190588c..c6b12ab 100644 --- a/lib-mime/rfc822address.c +++ b/lib-mime/rfc822address.c @@ -32,11 +32,12 @@ void rfc822_qualify(address_t *addr, const char *host) { - char *p; + if (!host) + return; for (; addr; addr = addr->next) { if (!addr->group && addr->mailbox && !strchr(addr->mailbox, '@')) { - p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2); + char *p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2); sprintf(p, "%s@%s", addr->mailbox, host); p_delete(&addr->mailbox); addr->mailbox = p; @@ -144,7 +145,7 @@ static const char *parse_comment(const char *s, static_buf *buf) case ')': level--; if (!level) - return s; + return s + 1; break; case '\\': @@ -388,90 +389,56 @@ rfc822_strcpy(char *buf, ssize_t buflen, const char *p, const char *specials) } } -ssize_t rfc822_write_address_single(char *buf, ssize_t buflen, - address_t *addr, int display) +ssize_t +rfc822_addrcpy(char *buf, ssize_t buflen, address_t *addr, int display) { ssize_t pos = 0; if (!addr) return 0; - buflen--; /* save room for the terminal nul */ - if (addr->personal) { pos = rfc822_strcpy(buf, buflen, addr->personal, RFC822Specials); - if (pos + 2 >= buflen) - goto done; - - buf[pos++] = ' '; - buf[pos++] = '<'; + pos += m_strcpy(buf + pos, buflen - pos, " <"); } if (addr->mailbox) { - if (!display) { - pos += m_strcpy(buf + pos, buflen - pos, addr->mailbox); - } else { - pos += m_strcpy(buf + pos, buflen - pos, mutt_addr_for_display(addr)); - } + pos += m_strcpy(buf + pos, buflen - pos, + display ? mutt_addr_for_display(addr) : addr->mailbox); if (addr->personal) { - if (pos + 1 >= buflen) - goto done; - buf[pos++] = '>'; + pos += m_strputc(buf + pos, buflen - pos, '>'); } if (addr->group) { - if (pos + 1 >= buflen) - goto done; - buf[pos++] = ':'; + pos += m_strputc(buf + pos, buflen - pos, ':'); } } else { - if (pos + 1 >= buflen) - goto done; - buf[pos++] = ';'; + pos += m_strputc(buf + pos, buflen - pos, ';'); } - done: - /* no need to check for length here since we already save space at the - beginning of this routine */ - buf[pos] = 0; return pos; } /* note: it is assumed that `buf' is nul terminated! */ ssize_t -rfc822_write_address(char *buf, ssize_t buflen, address_t *addr, int display) +rfc822_addrcat(char *buf, ssize_t buflen, address_t *addr, int display) { - ssize_t pos; + ssize_t pos = m_strnlen(buf, buflen); - buflen--; /* save room for the terminal nul */ - pos = m_strnlen(buf, buflen); - - if (pos) { - if (pos + 2 >= buflen) - goto done; - - buf[pos++] = ','; - buf[pos++] = ' '; - } + if (pos) + pos += m_strcpy(buf + pos, buflen - pos, ", "); for (; addr; addr = addr->next) { - pos += rfc822_write_address_single(buf + pos, buflen + 1 - pos, - addr, display); + pos += rfc822_addrcpy(buf + pos, buflen - pos, addr, display); if (!addr->group && addr->next && addr->next->mailbox) { /* if there is another address, and its not a group mailbox name or group terminator, add a comma to separate the addresses */ - if (pos + 2 >= buflen) - break; - - buf[pos++] = ','; - buf[pos++] = ' '; + pos += m_strcpy(buf + pos, buflen - pos, ", "); } } - done: - buf[pos] = '\0'; return pos; }